1 #ifndef CYMOCA_AST_MODEL_MODEL_H_
2 #define CYMOCA_AST_MODEL_MODEL_H_
5 #include "../statement/statement.h"
7 #include <unordered_map>
9 namespace cymoca::ast::model {
17 std::unordered_map<std::string, std::unique_ptr<element::Base>>
m_map{};
21 template <
class... Args>
23 int dummy[1 +
sizeof...(Args)] = {
24 (
m_map[args->getName()] = std::move(args), 0)...};
28 void set(
const std::string &name, std::unique_ptr<element::Base> element) {
29 m_map[name] = std::move(element);
34 std::unordered_map<std::string, std::unique_ptr<element::Base>> &
getMap() {
39 std::vector<INode *> v;
40 for (
auto &c :
m_map) {
41 v.push_back(c.second.get());
45 std::unique_ptr<INode>
clone()
const override {
46 auto res = std::make_unique<ElementDict>();
47 for (
auto &keval :
m_map) {
48 res->m_map[keval.first] = keval.second->cloneAs<
element::Base>();
59 std::unique_ptr<ElementDict> m_elements{};
60 std::unique_ptr<equation::List> m_equations{};
61 std::unique_ptr<statement::List> m_statements{};
65 Class(std::unique_ptr<ElementDict> elements,
66 std::unique_ptr<equation::List> equations)
67 : m_elements(std::move(elements)), m_equations(std::move(equations)) {}
72 return {m_elements.get(), m_equations.get()};
74 std::unique_ptr<INode>
clone()
const override {
75 return std::make_unique<Class>(m_elements->cloneAs<
ElementDict>(),
equation::List & getEquations()
std::unique_ptr< T > cloneAs()
std::vector< INode * > getChildren() override
ElementDict & getElements()
void set(const std::string &name, std::unique_ptr< element::Base > element)
std::unordered_map< std::string, std::unique_ptr< element::Base > > m_map
std::unique_ptr< INode > clone() const override
std::unique_ptr< INode > clone() const override
Class(std::unique_ptr< ElementDict > elements, std::unique_ptr< equation::List > equations)
std::vector< INode * > getChildren() override
std::unordered_map< std::string, std::unique_ptr< element::Base > > & getMap()
statement::List & getStatements()