package de.gaalop.api.dfg; import de.gaalop.dfg.Addition; import de.gaalop.dfg.BaseVector; import de.gaalop.dfg.Division; import de.gaalop.dfg.Equality; import de.gaalop.dfg.Exponentiation; import de.gaalop.dfg.Expression; import de.gaalop.dfg.ExpressionVisitor; import de.gaalop.dfg.FloatConstant; import de.gaalop.dfg.FunctionArgument; import de.gaalop.dfg.Inequality; import de.gaalop.dfg.InnerProduct; import de.gaalop.dfg.LogicalAnd; import de.gaalop.dfg.LogicalNegation; import de.gaalop.dfg.LogicalOr; import de.gaalop.dfg.MacroCall; import de.gaalop.dfg.MathFunctionCall; import de.gaalop.dfg.Multiplication; import de.gaalop.dfg.MultivectorComponent; import de.gaalop.dfg.Negation; import de.gaalop.dfg.OuterProduct; import de.gaalop.dfg.Relation; import de.gaalop.dfg.Reverse; import de.gaalop.dfg.Subtraction; import de.gaalop.dfg.Variable; /** * Returns the type of an Expression * @author Christian Steinmetz */ public class DFGNodeTypeGetter implements ExpressionVisitor { private DFGNodeType type; private static final DFGNodeTypeGetter getter = new DFGNodeTypeGetter(); /** * Returns the type of a Expression * @param expression The expression * @return The type of the given expression */ public static DFGNodeType getTypeOfDFGNode(Expression expression) { if (expression == null) { return null; } expression.accept(getter); return getter.type; } @Override public void visit(Subtraction node) { type = DFGNodeType.Subtraction; } @Override public void visit(Addition node) { type = DFGNodeType.Addition; } @Override public void visit(Division node) { type = DFGNodeType.Division; } @Override public void visit(InnerProduct node) { type = DFGNodeType.InnerProduct; } @Override public void visit(Multiplication node) { type = DFGNodeType.Multiplication; } @Override public void visit(MathFunctionCall node) { type = DFGNodeType.MathFunctionCall; } @Override public void visit(Variable node) { type = DFGNodeType.Variable; } @Override public void visit(MultivectorComponent node) { type = DFGNodeType.MultivectorComponent; } @Override public void visit(Exponentiation node) { type = DFGNodeType.Exponentiation; } @Override public void visit(FloatConstant node) { type = DFGNodeType.FloatConstant; } @Override public void visit(OuterProduct node) { type = DFGNodeType.OuterProduct; } @Override public void visit(BaseVector node) { type = DFGNodeType.BaseVector; } @Override public void visit(Negation node) { type = DFGNodeType.Negation; } @Override public void visit(Reverse node) { type = DFGNodeType.Reverse; } @Override public void visit(LogicalOr node) { type = DFGNodeType.LogicalOr; } @Override public void visit(LogicalAnd node) { type = DFGNodeType.LogicalAnd; } @Override public void visit(LogicalNegation node) { type = DFGNodeType.LogicalNegation; } @Override public void visit(Equality node) { type = DFGNodeType.Equality; } @Override public void visit(Inequality node) { type = DFGNodeType.Inequality; } @Override public void visit(Relation relation) { type = DFGNodeType.Relation; } @Override public void visit(FunctionArgument node) { type = DFGNodeType.FunctionArgument; } @Override public void visit(MacroCall node) { type = DFGNodeType.MacroCall; } }