cymoca
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
equation.h
Go to the documentation of this file.
1 #ifndef CYMOCA_AST_EQUATION_EQUATION_H_
2 #define CYMOCA_AST_EQUATION_EQUATION_H_
3 
4 #include "../node.h"
5 
6 namespace cymoca::ast::equation {
7 
11 class List : public TList<Base, Base> {
12  public:
14  using TList::TList;
15  std::unique_ptr<INode> clone() const override { return cloneList<List>(); }
16 };
17 
18 class Block : public Base {
19  protected:
20  std::unique_ptr<condition::Base> m_condition{};
21  std::unique_ptr<List> m_equations{};
22 
23  public:
25  Block(std::unique_ptr<condition::Base> condition,
26  std::unique_ptr<List> equations)
27  : m_condition(std::move(condition)), m_equations(std::move(equations)) {}
28  std::vector<INode *> getChildren() override {
29  return {m_condition.get(), m_equations.get()};
30  }
31  std::unique_ptr<INode> clone() const override {
32  return std::make_unique<Block>(m_condition->cloneAs<condition::Base>(),
33  m_equations->cloneAs<List>());
34  }
35 };
36 
37 class Simple : public TBinary<expression::Base, expression::Base, Base> {
38  public:
40  using TBinary::TBinary;
41  std::unique_ptr<INode> clone() const override {
42  return std::make_unique<Simple>(m_left->cloneAs<expression::Base>(),
43  m_right->cloneAs<expression::Base>());
44  }
45 };
46 
47 class If : public TList<Block, Base> {
48  public:
50  using TList::TList;
51  std::unique_ptr<INode> clone() const override { return cloneList<If>(); }
52 };
53 
54 class When : public TList<Block, Base> {
55  public:
57  using TList::TList;
58  std::unique_ptr<INode> clone() const override { return cloneList<When>(); }
59 };
60 
61 } // namespace cymoca::ast::equation
62 #endif
std::unique_ptr< INode > clone() const override
Definition: equation.h:58
std::unique_ptr< condition::Base > m_condition
Definition: equation.h:20
std::unique_ptr< INode > clone() const override
Definition: equation.h:15
std::unique_ptr< INode > clone() const override
Definition: equation.h:31
#define NODE_MACRO
Definition: node.h:15
std::unique_ptr< INode > clone() const override
Definition: equation.h:51
std::unique_ptr< expression::Base > m_left
Definition: node.h:65
std::unique_ptr< expression::Base > m_right
Definition: node.h:66
TBinary(std::unique_ptr< Left > left, std::unique_ptr< Right > right)
Definition: node.h:69
std::unique_ptr< INode > clone() const override
Definition: equation.h:41
std::unique_ptr< List > m_equations
Definition: equation.h:21
std::vector< INode * > getChildren() override
Definition: equation.h:28
Block(std::unique_ptr< condition::Base > condition, std::unique_ptr< List > equations)
Definition: equation.h:25