MicroModelicaCCompiler  4.5.3
class.hpp
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  This file is part of QSS Solver.
4 
5  QSS Solver is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  QSS Solver is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with QSS Solver. If not, see <http://www.gnu.org/licenses/>.
17 
18  ******************************************************************************/
19 
20 #pragma once
21 
22 #include <boost/variant/variant.hpp>
23 #include <string>
24 #include <list>
25 #include <map>
26 #include <vector>
27 
28 #include <ast/ast_types.hpp>
29 #include <deps/model_dependencies.hpp>
30 #include <util/util_types.hpp>
31 #include <ir/annotation.hpp>
32 #include <ir/equation.hpp>
33 #include <ir/event.hpp>
34 #include <ir/helpers.hpp>
36 #include <ir/statement.hpp>
37 
38 namespace MicroModelica {
39 namespace IR {
40 
41 typedef enum { DEC_PUBLIC, DEC_LOCAL } DEC_Type;
42 
43 class Class {
44  public:
45  virtual ~Class() = default;
46  virtual string name() const = 0;
47  virtual void insert(string n) = 0;
48  virtual void insert(AST_Equation eq) = 0;
49  virtual void insert(AST_Statement stm, bool initial) = 0;
50  virtual void insert(AST_Statement stm) = 0;
51  virtual void insert(AST_External_Function_Call efc) = 0;
52  virtual void insert(VarName n, Util::Variable& vi, DEC_Type type) = 0;
53  virtual void insert(VarName n, Util::Variable& vi) = 0;
54  virtual void insert(AST_Argument_Modification x) = 0;
55  virtual Util::VarSymbolTable symbols() const = 0;
56  virtual Util::ImportTable imports() const = 0;
57 };
58 
59 class Function : public Class {
60  public:
61  Function();
62  Function(string name);
63  virtual ~Function() = default;
64  string name() const;
65  void insert(AST_External_Function_Call efc);
66  void insert(VarName n, Util::Variable& vi, DEC_Type type);
67  void insert(VarName n, Util::Variable& vi);
68  void insert(AST_Equation eq);
69  void insert(AST_Statement stm, bool initial);
70  void insert(AST_Statement stm);
71  void insert(string n);
72  void insert(AST_Argument_Modification x);
73  Util::VarSymbolTable symbols() const;
74  Util::ImportTable imports() const;
78  unsigned int outputNbr() const;
81 
82  private:
84  std::string _name;
90  unsigned int _output_nbr;
91  unsigned int _external_function_id;
92  unsigned int _statement_id;
94 };
95 
97 
98 class Package : public Class {
99  public:
100  Package(){};
101  Package(string name);
102  virtual ~Package() = default;
104  string name() const;
105  void insert(string n);
106  void insert(AST_Equation eq);
107  void insert(AST_Statement stm, bool initial);
108  void insert(AST_Statement stm);
109  void setFunctions(FunctionTable& fs);
110  void insert(AST_External_Function_Call efc);
111  void insert(VarName n, Util::Variable& vi, DEC_Type type);
112  void insert(VarName n, Util::Variable& vi);
113  void insert(AST_Argument_Modification x);
114  Util::ImportTable imports() const;
116  std::string fileName();
117  std::string prefix();
118 
119  private:
121  std::string _name;
124 };
125 
126 class Model : public Class {
127  public:
128  Model();
129  Model(string name);
130  virtual ~Model() = default;
131  inline string name() const { return _name; };
132  void insert(string n);
133  void insert(VarName n, Util::Variable& vi, DEC_Type type);
135  void insert(AST_Equation eq);
136  void insert(AST_Statement stm, bool initial);
137  void insert(AST_Statement stm);
139  void insert(AST_External_Function_Call efc);
140  void insert(AST_Argument_Modification x);
142  inline Util::ImportTable imports() const { return _imports; };
143  inline ModelAnnotation annotations() const { return _annotations; };
144  inline FunctionTable calledFunctions() const { return _called_functions; };
145  inline int algebraicNbr() const { return _algebraic_nbr; };
146  inline int stateNbr() const { return _state_nbr; };
147  inline int discreteNbr() const { return _discrete_nbr; };
148  inline int inputNbr() const { return _input_nbr; };
149  inline int outputNbr() const { return _output_nbr; };
150  inline int eventNbr() const { return _event_nbr; };
151  inline Util::SymbolTable linkLibraries() const { return _link_libraries; };
152  inline Util::SymbolTable includeDirectories() const { return _include_directories; };
153  inline Util::SymbolTable libraryDirectories() const { return _library_directories; };
154  inline EquationTable derivatives() { return _derivatives; };
156  inline EquationTable algebraics() { return _algebraics; };
157  inline Deps::ModelDependencies dependencies() { return _dependencies; };
158  inline EquationTable outputs() { return _outputs; };
159  inline EventTable events() { return _events; };
160  inline bool externalFunctions() { return _external_functions; };
161  inline InputTable inputs() { return _inputs; };
162  void setEquations();
163  void setEvents();
164  void setOutputs();
165  void setInputs();
166  inline StatementTable initialCode() { return _initial_code; };
167  void computeDependencies();
168  void setModelConfig();
169 
170  protected:
179  void addVariable(int id, Option<Range> range, EQUATION::Type type, unsigned int& offset);
180  void setVariableOffset(Util::Variable var, unsigned int& offset, Util::Variable::RealType type, bool set_variable_count = true);
181  void setRealVariables(AST_Equation eq);
182  void addEquation(AST_Equation eq, Option<Range> range);
183  void reduceEquation(AST_Equation_Equality eq, list<AST_Equation>& new_eqs);
184  void addEvent(AST_Statement stm, Option<Range> range);
185  void reduceEvent(AST_Statement_When ev);
187  void addInput(Equation eq);
191 
192  std::string _name;
202  Deps::ModelDependencies _dependencies;
208  std::list<AST_Equation> _ast_equations;
209  std::list<AST_Statement> _ast_statements;
210  unsigned int _state_nbr;
211  unsigned int _discrete_nbr;
212  unsigned int _algebraic_nbr;
213  unsigned int _event_nbr;
214  unsigned int _output_nbr;
215  unsigned int _input_nbr;
216  int _derivative_id;
217  int _algebraic_id;
218  int _statement_id;
219  int _event_id;
220  int _output_id;
221  int _input_id;
222  bool _external_functions;
223 };
224 
225 typedef boost::variant<Function, Package, Model> ClassType;
226 
227 typedef Class* ClassPtr;
228 
229 } // namespace IR
230 } // namespace MicroModelica
MicroModelica::IR::Class
Definition: class.hpp:77
MicroModelica::IR::Function::imports
Util::ImportTable imports() const
Definition: class.cpp:170
MicroModelica::IR::Function::Function
Function()
Definition: class.cpp:70
MicroModelica::IR::Package::~Package
virtual ~Package()=default
ModelTable< int, Statement >
MicroModelica::IR::Function::_packages
CompiledPackageTable _packages
Definition: class.hpp:122
MicroModelica::IR::Model::_called_functions
FunctionTable _called_functions
Definition: class.hpp:229
MicroModelica::IR::Model::algebraics
EquationTable algebraics()
Definition: class.hpp:190
MicroModelica::Util::VarSymbolTable
Definition: symbol_table.hpp:184
MicroModelica::IR::Model::_output_nbr
unsigned int _output_nbr
Definition: class.hpp:248
MicroModelica::IR::Function::statements
StatementTable statements() const
Definition: class.cpp:172
MicroModelica::Util::Variable
Definition: symbol_table.hpp:75
MicroModelica::IR::Function::name
string name() const
Definition: class.cpp:168
MicroModelica::Util::ImportTable
ModelTable< std::string, std::string > ImportTable
Definition: util.hpp:66
MicroModelica::IR::Model::_initial_code
StatementTable _initial_code
Definition: class.hpp:238
MicroModelica::IR::Package::Package
Package()
Definition: class.hpp:134
MicroModelica::IR::EquationDefOrder
Definition: equation.hpp:137
MicroModelica::IR::Model::libraryDirectories
Util::SymbolTable libraryDirectories() const
Definition: class.hpp:187
MicroModelica::IR::Model::inputNbr
int inputNbr() const
Definition: class.hpp:182
MicroModelica::IR::Model::_packages
CompiledPackageTable _packages
Definition: class.hpp:237
MicroModelica::IR::Model::_events
EventTable _events
Definition: class.hpp:234
MicroModelica::IR::Model::_algebraic_id
int _algebraic_id
Definition: class.hpp:251
MicroModelica::IR::Model::dependencies
Deps::ModelDependencies dependencies()
Definition: class.hpp:191
MicroModelica::IR::Model::Model
Model()
Definition: class.cpp:220
MicroModelica::IR::Model::_input_nbr
unsigned int _input_nbr
Definition: class.hpp:249
MicroModelica::IR::Model::reduceEquation
void reduceEquation(AST_Equation_Equality eq, list< AST_Equation > &new_eqs)
Definition: class.cpp:479
MicroModelica::IR::Model::_dependencies
Deps::ModelDependencies _dependencies
Definition: class.hpp:236
MicroModelica::IR::Model::externalFunctions
bool externalFunctions()
Definition: class.hpp:194
MicroModelica::IR::Model::addEvent
void addEvent(AST_Statement stm, Option< Range > range)
Definition: class.cpp:615
MicroModelica::IR::Model::_ast_statements
std::list< AST_Statement > _ast_statements
Definition: class.hpp:243
event.hpp
MicroModelica::IR::Package::_imports
Util::ImportTable _imports
Definition: class.hpp:154
MicroModelica::IR::Model::_external_functions
bool _external_functions
Definition: class.hpp:256
MicroModelica::IR::DEC_LOCAL
@ DEC_LOCAL
Definition: class.hpp:92
MicroModelica::IR::Package::name
string name() const
Definition: class.cpp:208
MicroModelica::IR::Function::packages
CompiledPackageTable packages() const
Definition: class.cpp:176
MicroModelica::IR::Function::_local_symbols
Util::VarSymbolTable _local_symbols
Definition: class.hpp:119
MicroModelica::IR::Model::algebraicNbr
int algebraicNbr() const
Definition: class.hpp:179
helpers.hpp
Option
Definition: util_types.hpp:32
MicroModelica::IR::EQUATION::Type
Type
Definition: equation.hpp:50
MicroModelica::IR::Model::_output_id
int _output_id
Definition: class.hpp:254
MicroModelica::IR::Model::setOutputs
void setOutputs()
Definition: class.cpp:715
MicroModelica::IR::Model::symbols
Util::VarSymbolTable symbols() const
Definition: class.cpp:284
MicroModelica::IR::Function::symbols
Util::VarSymbolTable symbols() const
Definition: class.cpp:98
MicroModelica::IR::Class::insert
virtual void insert(string n)=0
MicroModelica::Util::Variable::RealType
RealType
Definition: symbol_table.hpp:84
MicroModelica::IR::Model::addEquation
void addEquation(AST_Equation eq, Option< Range > range)
Definition: class.cpp:451
MicroModelica::IR::Package::setFunctions
void setFunctions(FunctionTable &fs)
Definition: class.cpp:198
MicroModelica::IR::Model::orderEquations
void orderEquations()
Definition: class.cpp:515
MicroModelica::IR::Model::_imports
Util::ImportTable _imports
Definition: class.hpp:227
MicroModelica::IR::Model::addFunction
void addFunction(Util::SymbolTable symbols, FunctionTable &fs)
Definition: class.cpp:373
MicroModelica::IR::Model::_algebraic_nbr
unsigned int _algebraic_nbr
Definition: class.hpp:246
MicroModelica::IR::Model::_library_directories
Util::SymbolTable _library_directories
Definition: class.hpp:239
MicroModelica::IR::Package::_functions
FunctionTable _functions
Definition: class.hpp:156
MicroModelica::IR::Package::_packages
CompiledPackageTable _packages
Definition: class.hpp:157
MicroModelica::IR::Model::getEquationDefOrder
EquationDefOrder getEquationDefOrder(Equation eq)
Definition: class.cpp:506
MicroModelica::IR::FunctionAnnotation
Definition: annotation.hpp:90
MicroModelica::Util::SymbolTable
ModelTable< std::string, std::string > SymbolTable
Definition: equation.hpp:62
MicroModelica::IR::Function::arguments
Util::VariableList arguments() const
Definition: class.cpp:182
MicroModelica::IR::Model::eventNbr
int eventNbr() const
Definition: class.hpp:184
MicroModelica::IR::Package
Definition: class.hpp:132
MicroModelica::IR::Model::computeDependencies
void computeDependencies()
Definition: class.cpp:752
MicroModelica::IR::Function::_name
std::string _name
Definition: class.hpp:118
MicroModelica::IR::Model::reduceEvent
void reduceEvent(AST_Statement_When ev)
Definition: class.cpp:662
MicroModelica::IR::Package::symbols
Util::VarSymbolTable symbols() const
Definition: class.cpp:188
MicroModelica::IR::Model::_outputs
EquationTable _outputs
Definition: class.hpp:233
MicroModelica::IR::ModelAnnotation
Definition: annotation.hpp:121
MicroModelica::IR::Function::annotations
FunctionAnnotation annotations() const
Definition: class.cpp:180
util_types.hpp
MicroModelica::IR::Function::_arguments
Util::VariableList _arguments
Definition: class.hpp:123
MicroModelica::IR::DEC_Type
DEC_Type
Definition: class.hpp:75
VarName
std::string VarName
Definition: util_types.hpp:43
MicroModelica::IR::Model::BDFDerivatives
EquationTable BDFDerivatives()
Definition: class.cpp:494
MicroModelica::IR::Model::~Model
virtual ~Model()=default
MicroModelica::IR::Package::insert
void insert(string n)
Definition: class.cpp:190
MicroModelica::IR::Function::_annotations
FunctionAnnotation _annotations
Definition: class.hpp:120
MicroModelica::IR::Equation
Definition: equation.hpp:67
MicroModelica::IR::Model::setVariableOffset
void setVariableOffset(Util::Variable var, unsigned int &offset, Util::Variable::RealType type, bool set_variable_count=true)
Definition: class.cpp:302
equation.hpp
MicroModelica::IR::Model::outputs
EquationTable outputs()
Definition: class.hpp:192
MicroModelica::IR::Class::imports
virtual Util::ImportTable imports() const =0
MicroModelica::IR::Model::includeDirectories
Util::SymbolTable includeDirectories() const
Definition: class.hpp:186
MicroModelica::IR::Model::derivatives
EquationTable derivatives()
Definition: class.hpp:188
MicroModelica::IR::Class::symbols
virtual Util::VarSymbolTable symbols() const =0
MicroModelica::IR::Model::setInputs
void setInputs()
Definition: class.cpp:741
MicroModelica::IR::Model::addInput
void addInput(Equation eq)
Definition: class.cpp:732
MicroModelica::IR::Model::linkLibraries
Util::SymbolTable linkLibraries() const
Definition: class.hpp:185
MicroModelica::IR::Package::fileName
std::string fileName()
Definition: class.cpp:214
MicroModelica::IR::Model::_link_libraries
Util::SymbolTable _link_libraries
Definition: class.hpp:240
MicroModelica::IR::Function::_external_functions
ExternalFunctionTable _external_functions
Definition: class.hpp:127
MicroModelica::IR::Model::_algebraics
EquationTable _algebraics
Definition: class.hpp:232
MicroModelica::IR::Function::insert
void insert(AST_External_Function_Call efc)
Definition: class.cpp:118
MicroModelica::IR::Class::~Class
virtual ~Class()=default
MicroModelica::IR::Model::setModelConfig
void setModelConfig()
Definition: class.cpp:758
MicroModelica::IR::Model::calledFunctions
FunctionTable calledFunctions() const
Definition: class.hpp:178
MicroModelica::IR::Model::_derivatives
EquationTable _derivatives
Definition: class.hpp:230
MicroModelica::IR::Model::_statement_id
int _statement_id
Definition: class.hpp:252
MicroModelica::IR::Function::_imports
Util::ImportTable _imports
Definition: class.hpp:117
MicroModelica::IR::Model::computeEventOffsetShift
int computeEventOffsetShift(Option< Range > range)
Definition: class.cpp:601
MicroModelica::IR::Package::definitions
FunctionTable definitions()
Definition: class.cpp:212
MicroModelica::IR::Model::initialCode
StatementTable initialCode()
Definition: class.hpp:200
MicroModelica::IR::Function::_external_function_id
unsigned int _external_function_id
Definition: class.hpp:125
MicroModelica::IR::Model::_include_directories
Util::SymbolTable _include_directories
Definition: class.hpp:241
MicroModelica::IR::Function::outputNbr
unsigned int outputNbr() const
Definition: class.cpp:178
MicroModelica::IR::Model::_state_nbr
unsigned int _state_nbr
Definition: class.hpp:244
MicroModelica
Definition: files.cpp:45
MicroModelica::IR::Model::_annotations
ModelAnnotation _annotations
Definition: class.hpp:228
MicroModelica::IR::Model::_input_id
int _input_id
Definition: class.hpp:255
MicroModelica::IR::Model::outputNbr
int outputNbr() const
Definition: class.hpp:183
reduction_functions.hpp
MicroModelica::IR::Model
Definition: class.hpp:160
MicroModelica::IR::Model::_ordered_derivatives
EquationTable _ordered_derivatives
Definition: class.hpp:231
MicroModelica::IR::Package::_name
std::string _name
Definition: class.hpp:155
MicroModelica::IR::Model::events
EventTable events()
Definition: class.hpp:193
ast_types.hpp
MicroModelica::IR::Model::_inputs
InputTable _inputs
Definition: class.hpp:235
MicroModelica::IR::ClassType
boost::variant< Function, Package, Model > ClassType
Definition: class.hpp:259
MicroModelica::IR::ClassPtr
Class * ClassPtr
Definition: class.hpp:261
MicroModelica::IR::Model::imports
Util::ImportTable imports() const
Definition: class.hpp:176
MicroModelica::Util::VariableList
std::list< Variable > VariableList
Definition: symbol_table.hpp:199
MicroModelica::IR::Function::_statement_id
unsigned int _statement_id
Definition: class.hpp:126
MicroModelica::IR::Function::externalFunctions
ExternalFunctionTable externalFunctions() const
Definition: class.cpp:174
MicroModelica::IR::Function::~Function
virtual ~Function()=default
MicroModelica::IR::Model::discreteNbr
int discreteNbr() const
Definition: class.hpp:181
MicroModelica::IR::Model::_event_id
int _event_id
Definition: class.hpp:253
MicroModelica::IR::Model::setRealVariables
void setRealVariables(AST_Equation eq)
Definition: class.cpp:314
MicroModelica::IR::FunctionTable
ModelTable< std::string, Function > FunctionTable
Definition: class.hpp:130
MicroModelica::IR::Model::setEvents
void setEvents()
Definition: class.cpp:683
MicroModelica::IR::Model::_derivative_id
int _derivative_id
Definition: class.hpp:250
MicroModelica::IR::Model::setCalledFunctions
void setCalledFunctions(FunctionTable &fs)
Definition: class.cpp:401
annotation.hpp
MicroModelica::IR::Class::name
virtual string name() const =0
MicroModelica::IR::Model::setEquations
void setEquations()
Definition: class.cpp:542
MicroModelica::IR::Model::annotations
ModelAnnotation annotations() const
Definition: class.hpp:177
MicroModelica::IR::Model::_discrete_nbr
unsigned int _discrete_nbr
Definition: class.hpp:245
MicroModelica::IR::Package::imports
Util::ImportTable imports() const
Definition: class.cpp:210
MicroModelica::IR::DEC_PUBLIC
@ DEC_PUBLIC
Definition: class.hpp:92
MicroModelica::IR::Model::stateNbr
int stateNbr() const
Definition: class.hpp:180
MicroModelica::IR::Function::_output_nbr
unsigned int _output_nbr
Definition: class.hpp:124
MicroModelica::IR::Model::inputs
InputTable inputs()
Definition: class.hpp:195
statement.hpp
MicroModelica::IR::Package::prefix
std::string prefix()
Definition: class.cpp:216
MicroModelica::IR::Model::addVariable
void addVariable(int id, Option< Range > range, EQUATION::Type type, unsigned int &offset)
Adds a new variable for events and output equations that doesn't have associated variables in the mod...
Definition: class.cpp:579
MicroModelica::IR::Model::_event_nbr
unsigned int _event_nbr
Definition: class.hpp:247
MicroModelica::IR::Model::_ast_equations
std::list< AST_Equation > _ast_equations
Definition: class.hpp:242
MicroModelica::IR::Function::_statements
StatementTable _statements
Definition: class.hpp:121
MicroModelica::IR::Model::_name
std::string _name
Definition: class.hpp:226
MicroModelica::IR::Model::name
string name() const
Definition: class.hpp:165
MicroModelica::IR::Model::insert
void insert(string n)
Definition: class.cpp:436