23 #include <unordered_map>
25 #include <antares/expressions/IName.h>
26 #include <antares/expressions/nodes/Node.h>
27 #include <antares/expressions/nodes/NodesForwardDeclaration.h>
28 #include <antares/expressions/visitors/InvalidNode.h>
30 namespace Antares::Expressions::Visitors
35 void logError(
const std::string& msg);
37 template<
class RetT,
class VisitorT,
class NodeT,
class... Args>
38 RetT tryVisit(
const Nodes::Node* node, VisitorT& visitor, Args... args)
40 auto* x =
dynamic_cast<const NodeT*
>(node);
41 return visitor.visit(x, args...);
44 template<
class R,
class... Args>
47 template<
class R,
class... Args>
59 template<
class... NodeTypes>
62 std::unordered_map<std::type_index, FunctionT> nodeDispatchFunctions;
64 [&nodeDispatchFunctions] {
65 nodeDispatchFunctions[
typeid(NodeTypes)] = &tryVisit<R,
70 return nodeDispatchFunctions;
74 template<
class R,
class... Args>
101 const static auto nodeVisitList =
NodeVisitsProvider<R, Args...>::template NodesVisitList<
123 return nodeVisitList.at(
typeid(*node))(node, *
this, args...);
125 catch (std::exception& e)
127 using namespace std::string_literals;
128 logError(
"Antares::Expressions::Visitor: could not visit the node! "s + e.what());
Represents a AllTimeSumNode node in a syntax tree.
Definition: AllTimeSumNode.h:31
Represents a division node in a syntax tree.
Definition: DivisionNode.h:31
Represents an equality comparison node in a syntax tree.
Definition: EqualNode.h:31
AST node representing a function expression (max, min, pow, ...).
Definition: FunctionNode.h:63
Represents a greater than or equal comparison node in a syntax tree.
Definition: GreaterThanOrEqualNode.h:31
Represents a less than or equal comparison node in a syntax tree.
Definition: LessThanOrEqualNode.h:31
Represents a literal node in a syntax tree, storing a double value.
Definition: LiteralNode.h:11
Represents a multiplication node in a syntax tree.
Definition: MultiplicationNode.h:31
Represents a negation node in a syntax tree.
Definition: NegationNode.h:31
Base class for nodes in a syntax tree.
Definition: Node.h:30
Represents a parameter node in a syntax tree, storing a string value.
Definition: ParameterNode.h:14
Represents a port field node in a syntax tree.
Definition: PortFieldNode.h:32
Represents a port field node where the expression is a sum.
Definition: PortFieldSumNode.h:32
Represents a subtraction node in a syntax tree.
Definition: SubtractionNode.h:31
Definition: TimeIndexNode.h:28
Definition: TimeShiftNode.h:29
Definition: TimeSumNode.h:28
Represents a variable node in a syntax tree, storing a string value.
Definition: VariableNode.h:20
Definition: InvalidNode.h:28
Definition: NodeVisitor.h:76
virtual R visit(const Nodes::PortFieldSumNode *, Args... args)=0
Visits a PortFieldSumNode.
virtual R visit(const Nodes::DivisionNode *, Args... args)=0
Visits a DivisionNode and processes its children.
virtual R visit(const Nodes::TimeSumNode *, Args... args)=0
Visits a TimeSumNode.
virtual R visit(const Nodes::TimeIndexNode *, Args... args)=0
Visits a TimeIndexNode.
virtual R visit(const Nodes::AllTimeSumNode *, Args... args)=0
Visits a AllTimeSumNode.
virtual R visit(const Nodes::PortFieldNode *, Args... args)=0
Visits a PortFieldNode.
R dispatch(const Nodes::Node *node, Args... args)
Definition: NodeVisitor.h:94
virtual R visit(const Nodes::MultiplicationNode *, Args... args)=0
Visits a MultiplicationNode and processes its children.
virtual R visit(const Nodes::LiteralNode *, Args... args)=0
Visits a LiteralNode.
virtual R visit(const Nodes::GreaterThanOrEqualNode *, Args... args)=0
Visits a GreaterThanOrEqualNode and processes its children.
virtual R visit(const Nodes::NegationNode *, Args... args)=0
Visits a NegationNode and processes its child.
virtual R visit(const Nodes::VariableNode *, Args... args)=0
Visits a VariableNode.
virtual R visit(const Nodes::SumNode *, Args... args)=0
Visits a SumNode and processes its children.
virtual R visit(const Nodes::FunctionNode *, Args... args)=0
Visits a FunctionNode.
virtual R visit(const Nodes::ParameterNode *, Args... args)=0
Visits a ParameterNode.
virtual R visit(const Nodes::LessThanOrEqualNode *, Args... args)=0
Visits a LessThanOrEqualNode and processes its children.
virtual R visit(const Nodes::SubtractionNode *, Args... args)=0
Visits a SubtractionNode and processes its children.
virtual R visit(const Nodes::TimeShiftNode *, Args... args)=0
Visits a TimeShiftNode.
virtual R visit(const Nodes::EqualNode *, Args... args)=0
Visits an EqualNode and processes its children.
Definition: NodeVisitor.h:49
static auto NodesVisitList()
Definition: NodeVisitor.h:60