package models.terms.meta;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Getter
public class OrderVariableConstraint {
// lower <= x <= upper
private int upper = 100000000;
private int lower = -1;
private boolean isOk = true;
public boolean setConstraint(int value, OrderConstraint constraint) {
switch (constraint) {
case ANY:
return true;
case EQ:
return setEq(value);
case GE:
return setUpper(value);
case GT:
return setUpper(value - 1);
case LE:
return setLower(value);
case LT:
return setLower(value + 1);
}
return false;
}
public int getOrder() {
if (isOk) {
return lower;
}
return -1;
}
private boolean setEq(int eq) {
return setUpper(eq) && setLower(eq);
}
private boolean setUpper(int upper) {
if (isOk && this.lower <= upper && upper <= this.upper) {
this.upper = upper;
return true;
}
isOk = false;
return false;
}
private boolean setLower(int lower) {
if (isOk && this.lower <= lower && lower <= this.upper) {
this.lower = lower;
return true;
}
isOk = false;
return false;
}
}