package nl.uva.sc.encoders.qlruntime.evaluator; import nl.uva.sc.encoders.ql.ast.operator.AddOperator; import nl.uva.sc.encoders.ql.ast.operator.AndOperator; import nl.uva.sc.encoders.ql.ast.operator.DivideOperator; import nl.uva.sc.encoders.ql.ast.operator.EqualsOperator; import nl.uva.sc.encoders.ql.ast.operator.GreaterOrEqualOperator; import nl.uva.sc.encoders.ql.ast.operator.GreaterThanOperator; import nl.uva.sc.encoders.ql.ast.operator.LessOrEqualOperator; import nl.uva.sc.encoders.ql.ast.operator.LessThanOperator; import nl.uva.sc.encoders.ql.ast.operator.MultiplyOperator; import nl.uva.sc.encoders.ql.ast.operator.NotEqualsOperator; import nl.uva.sc.encoders.ql.ast.operator.OrOperator; import nl.uva.sc.encoders.ql.ast.operator.SubstractOperator; import nl.uva.sc.encoders.ql.visitor.BinaryOperatorVisitor; import nl.uva.sc.encoders.qlruntime.model.value.Value; public class BinaryEvaluator implements BinaryOperatorVisitor<Value> { private final Value leftValue; private final Value rightValue; public BinaryEvaluator(Value leftValue, Value rightValue) { this.leftValue = leftValue; this.rightValue = rightValue; } @Override public Value visit(AddOperator operator) { return leftValue.add(rightValue); } @Override public Value visit(AndOperator operator) { return leftValue.and(rightValue); } @Override public Value visit(DivideOperator operator) { return leftValue.divide(rightValue); } @Override public Value visit(GreaterOrEqualOperator operator) { return leftValue.greaterOrEqual(rightValue); } @Override public Value visit(GreaterThanOperator operator) { return leftValue.greaterThan(rightValue); } @Override public Value visit(LessOrEqualOperator operator) { return leftValue.lessOrEqual(rightValue); } @Override public Value visit(MultiplyOperator operator) { return leftValue.multiply(rightValue); } @Override public Value visit(OrOperator operator) { return leftValue.or(rightValue); } @Override public Value visit(SubstractOperator operator) { return leftValue.substract(rightValue); } @Override public Value visit(LessThanOperator lessThanOperator) { return leftValue.lessThan(rightValue); } @Override public Value visit(EqualsOperator equalsOperator) { return leftValue.equal(rightValue); } @Override public Value visit(NotEqualsOperator notEqualsOperator) { return leftValue.notEqual(rightValue); } }