27#include <antares/expressions/IName.h>
28#include <antares/expressions/nodes/Node.h>
29#include <antares/expressions/nodes/NodesForwardDeclaration.h>
30#include <antares/expressions/visitors/InvalidNode.h>
32namespace Antares::Expressions::Visitors
39 using LogFunction = std::function<void(
const std::string&)>;
48template<
class RetT,
class VisitorT,
class NodeT,
class... Args>
49RetT tryVisit(
const Nodes::Node* node, VisitorT& visitor, Args... args)
51 auto* x =
dynamic_cast<const NodeT*
>(node);
52 return visitor.visit(x, args...);
55template<
class R,
class... Args>
58template<
class R,
class... Args>
70 template<
class... NodeTypes>
73 std::unordered_map<std::type_index, FunctionT> nodeDispatchFunctions;
75 [&nodeDispatchFunctions] {
76 nodeDispatchFunctions[
typeid(NodeTypes)] = &tryVisit<R,
81 return nodeDispatchFunctions;
85template<
class R,
class... Args>
112 const static auto nodeVisitList =
NodeVisitsProvider<R, Args...>::template NodesVisitList<
131 return nodeVisitList.at(
typeid(*node))(node, *
this, args...);
133 catch (std::exception&)
135 log_.error(
"Antares::Expressions::Visitor: could not visit the node!");
290 LogSink log_ = RedirectToAntaresLogs();
Represents a component parameter node in a syntax tree.
Definition ComponentNode.h:80
Represents a component variable node in a syntax tree.
Definition ComponentNode.h:66
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
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:19
Represents a port field node in a syntax tree.
Definition PortFieldNode.h:33
Represents a port field node where the expression is a sum.
Definition PortFieldSumNode.h:33
Represents a subtraction node in a syntax tree.
Definition SubtractionNode.h:31
Represents a variable node in a syntax tree, storing a string value.
Definition VariableNode.h:20
Definition InvalidNode.h:28
Definition NodeVisitor.h:87
virtual R visit(const Nodes::ComponentParameterNode *, Args... args)=0
Visits a ComponentParameterNode.
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::PortFieldNode *, Args... args)=0
Visits a PortFieldNode.
R dispatch(const Nodes::Node *node, Args... args)
Definition NodeVisitor.h:105
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::ComponentVariableNode *, Args... args)=0
Visits a ComponentVariableNode.
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::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::EqualNode *, Args... args)=0
Visits an EqualNode and processes its children.
Definition NodeVisitor.h:38
Definition NodeVisitor.h:60
static auto NodesVisitList()
Definition NodeVisitor.h:71