/** * Represents the And type, a conditional which returns true if both left and * right values are true. This operator short circuits, which means if the first * value is false, the right value is not evaluated */ class And implements Cond { private Cond lVal; private Cond rVal; /** * Constructor for the And conditional. * * @param lVal the left value in the And Operation. * @param rVal This is only evaluated if lVal is true */ public And(Cond lVal, Cond rVal) { this.lVal = lVal; this.rVal = rVal; } @Override public boolean eval() { if (!this.lVal.eval()) { return false; } return this.rVal.eval(); } @Override public String toString() { return "(" + this.lVal + " & " + this.rVal + ")"; } @Override public Cond neg() { return new Or(lVal.neg(), rVal.neg()); } }