MicroModelicaCCompiler  4.5.3
expression.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 <string>
23 
24 #include <ast/ast_types.hpp>
25 #include <util/symbol_table.hpp>
26 
27 namespace MicroModelica {
28 namespace IR {
29 
30 class Expression {
31  public:
32  Expression();
33  Expression(AST_Expression exp, int order = 0);
34  ~Expression() = default;
35  std::string print() const;
36  inline AST_Expression expression() const { return _exp; };
37  bool isReference() const;
38  std::string usage() const;
39  std::string dimVariables(bool range_idxs = false) const;
40  bool isEmpty() const { return _exp == nullptr; };
41  bool isValid() const { return _exp != nullptr; };
43  bool isScalar() const;
44  list<Expression> indexes() const;
45  static Expression generate(std::string var_name, std::vector<std::string> indices);
46  bool operator<(const Expression& other) const;
47 
48  friend std::ostream& operator<<(std::ostream& out, const Expression& s);
49 
50  std::multimap<std::string, int> usedVariables() const;
51  bool autonomous() const;
52 
53  protected:
54  std::vector<Expression> usageExps() const;
55 
56  private:
57  AST_Expression _exp;
58  int _order;
59 };
60 
61 typedef list<Expression> ExpressionList;
62 } // namespace IR
63 } // namespace MicroModelica
MicroModelica::IR::Expression::indexes
list< Expression > indexes() const
Definition: expression.cpp:145
MicroModelica::IR::Expression::usage
std::string usage() const
Definition: expression.cpp:101
MicroModelica::IR::Expression::reference
Option< Util::Variable > reference() const
Definition: expression.cpp:94
MicroModelica::IR::Expression::operator<
bool operator<(const Expression &other) const
Definition: expression.cpp:183
MicroModelica::IR::Expression::expression
AST_Expression expression() const
Definition: expression.hpp:87
MicroModelica::IR::Expression::print
std::string print() const
Definition: expression.cpp:61
symbol_table.hpp
MicroModelica::IR::Expression::autonomous
bool autonomous() const
Definition: expression.cpp:198
Option
Definition: util_types.hpp:32
MicroModelica::IR::Expression::generate
static Expression generate(std::string var_name, std::vector< std::string > indices)
Definition: expression.cpp:162
MicroModelica::IR::Expression::Expression
Expression()
Definition: expression.cpp:59
MicroModelica::IR::ExpressionList
list< Expression > ExpressionList
Definition: expression.hpp:95
MicroModelica::IR::Expression::isValid
bool isValid() const
Definition: expression.hpp:92
MicroModelica::IR::Expression::usedVariables
std::multimap< std::string, int > usedVariables() const
Definition: expression.cpp:192
MicroModelica::IR::Expression::_order
int _order
Definition: expression.hpp:109
MicroModelica::IR::Expression::isEmpty
bool isEmpty() const
Definition: expression.hpp:91
MicroModelica::IR::Expression::dimVariables
std::string dimVariables(bool range_idxs=false) const
Definition: expression.cpp:114
MicroModelica::IR::Expression::isScalar
bool isScalar() const
Definition: expression.cpp:73
MicroModelica
Definition: files.cpp:45
MicroModelica::IR::Expression::_exp
AST_Expression _exp
Definition: expression.hpp:108
ast_types.hpp
MicroModelica::IR::Expression::isReference
bool isReference() const
Definition: expression.cpp:86
MicroModelica::IR::Expression::usageExps
std::vector< Expression > usageExps() const
Definition: expression.cpp:129
MicroModelica::IR::Expression::operator<<
friend std::ostream & operator<<(std::ostream &out, const Expression &s)
Definition: expression.cpp:178
MicroModelica::IR::Expression::~Expression
~Expression()=default