package pebl.builder;
import java.util.Arrays;
public enum Ternary {
PLUS(2, "+"),
PLUS_MINUS(1, "+/-"),
MINUS(0, "-");
private final int number;
private final String string;
Ternary(int number, String string) {
this.number = number;
this.string = string;
}
public int getNumber() {
return number;
}
public String getString() {
return string;
}
public static Ternary from(int number) {
return Arrays.stream(Ternary.values()).filter(t -> t.getNumber() == number).findFirst().orElseThrow(() -> new IllegalArgumentException("Number " + number + " not available"));
}
public static Ternary from(String string) {
return Arrays.stream(Ternary.values()).filter(t -> t.getString().equals(string)).findFirst().orElseThrow(() -> new IllegalArgumentException("String " + string + " not available"));
}
public Ternary aggregate(Ternary b) {
if(this.equals(b)) {
return this;
} else {
return PLUS_MINUS;
}
}
public Ternary max(Ternary b) {
if(PLUS.equals(this) || PLUS.equals(b)) {
return PLUS;
} else if(PLUS_MINUS.equals(this) || PLUS_MINUS.equals(b)) {
return PLUS_MINUS;
} else {
return MINUS;
}
}
public Ternary atMost(Ternary b) {
int n = number;
if(n > b.getNumber()) {
n = b.getNumber();
}
return Ternary.from(n);
}
}