package interdroid.swan.swansong; public class LogicExpression implements TriStateExpression { private TriStateExpression mLeft; private TriStateExpression mRight; private LogicOperator mOperator; private String mLocation; private LogicExpression(String location, TriStateExpression left, LogicOperator operator, TriStateExpression right) { this.mLocation = location; this.mLeft = left; this.mRight = right; this.mOperator = operator; } public LogicExpression(String location, TriStateExpression left, BinaryLogicOperator operator, TriStateExpression right) { this(location, left, (LogicOperator) operator, right); } public LogicExpression(String location, UnaryLogicOperator operator, TriStateExpression expression) { this(location, expression, operator, null); } @Override public void setInferredLocation(String location) { if (mLocation.equals(Expression.LOCATION_INFER)) { mLocation = location; return; } throw new RuntimeException( "Please don't use this method. For internal use only."); } public TriStateExpression getLeft() { return mLeft; } public TriStateExpression getRight() { return mRight; } public TriStateExpression getFirst(boolean leftFirst) { if (leftFirst) { return mLeft; } else { return mRight; } } public TriStateExpression getLast(boolean leftFirst) { if (leftFirst) { return mRight; } else { return mLeft; } } public LogicOperator getOperator() { return mOperator; } @Override public String toParseString() { if (mRight == null) { return mOperator.toString() + " " + mLeft.toParseString(); } else { return "(" + mLeft.toParseString() + " " + mOperator + " " + mRight.toParseString() + ")"; } } @Override public String getLocation() { return mLocation; } }