package nl.uva.polyql.ast.expressions.operations; import nl.uva.polyql.ast.expressions.operators.Add; import nl.uva.polyql.ast.expressions.operators.And; import nl.uva.polyql.ast.expressions.operators.Divide; import nl.uva.polyql.ast.expressions.operators.Equals; import nl.uva.polyql.ast.expressions.operators.GreaterThan; import nl.uva.polyql.ast.expressions.operators.GreaterThanOrEquals; import nl.uva.polyql.ast.expressions.operators.Not; import nl.uva.polyql.ast.expressions.operators.LesserThan; import nl.uva.polyql.ast.expressions.operators.LesserThanOrEquals; import nl.uva.polyql.ast.expressions.operators.Multiply; import nl.uva.polyql.ast.expressions.operators.Negative; import nl.uva.polyql.ast.expressions.operators.NotEquals; import nl.uva.polyql.ast.expressions.operators.Or; import nl.uva.polyql.ast.expressions.operators.Subtract; import nl.uva.polyql.ast.expressions.operators.Xor; import nl.uva.polyql.utils.SyntaxMap; /** * A class that contains and provides operators that are registered to it. When creating new * operators, they should be provided to this manager by calling {@link #register()}. */ public class OperatorManager { private final static SyntaxMap<BinaryOperator> sBinaryOperators = new SyntaxMap<>(); private final static SyntaxMap<UnaryOperator> sUnaryOperators = new SyntaxMap<>(); static { register(new Add()); register(new And()); register(new Divide()); register(new Equals()); register(new GreaterThan()); register(new LesserThan()); register(new GreaterThanOrEquals()); register(new Not()); register(new LesserThanOrEquals()); register(new Multiply()); register(new Negative()); register(new NotEquals()); register(new Or()); register(new Subtract()); register(new Xor()); } public static void register(final BinaryOperator operator) { sBinaryOperators.put(operator); } public static void register(final UnaryOperator operator) { sUnaryOperators.put(operator); } public static BinaryOperator getBinaryOperator(final String syntax) { return sBinaryOperators.get(syntax); } public static UnaryOperator getUnaryOperator(final String syntax) { return sUnaryOperators.get(syntax); } /** * This class is static-only. */ private OperatorManager() {} }