KSeExpr  4.0.4.0
ExprMultiExpr.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2 // SPDX-License-Identifier: LicenseRef-Apache-2.0
3 // SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 
6 #include "Expression.h"
7 
8 namespace KSeExpr
9 {
10 class DExpression;
11 class GlobalVal;
12 class Expressions;
13 
14 using VariableHandle = std::set<GlobalVal *>::iterator;
15 using VariableSetHandle = std::set<GlobalVal *>::iterator;
16 using ExprHandle = std::set<DExpression *>::iterator;
17 using ExprEvalHandle = std::pair<ExprHandle, std::vector<DExpression *> >;
18 
19 class DExpression : public Expression
20 {
22 
23 public:
24  DExpression(const std::string &varName, Expressions &context, const std::string &e, const ExprType &type = ExprType().FP(3), EvaluationStrategy be = defaultEvaluationStrategy);
25 
26  mutable std::set<DExpression *> operandExprs;
27  mutable std::set<GlobalVal *> operandVars;
28 
30  const std::string &name() const;
31  ExprVarRef *resolveVar(const std::string &name) const override;
32  void eval();
33 };
34 
36 {
37  std::set<DExpression *> exprToEval;
38  std::set<DExpression *> exprEvaled;
39 
40 public:
41  std::set<DExpression *> AllExprs;
42  std::set<GlobalVal *> AllExternalVars;
43 
44  // Expressions(int numberOfEvals=1);
45  Expressions() = default;
46  ~Expressions();
47  Expressions(const Expressions&) = default;
48  Expressions& operator=(const Expressions &) = default;
49  Expressions(Expressions &&) = default;
51 
52  VariableHandle addExternalVariable(const std::string &variableName, ExprType seTy);
53  ExprHandle addExpression(const std::string &varName, ExprType seTy, const std::string &expr);
54 
56  void setLoopVariable(VariableSetHandle handle, double *values, unsigned dim);
57  void setLoopVariable(VariableSetHandle handle, double value)
58  {
59  setLoopVariable(handle, &value, 1);
60  }
61  void setLoopVariable(VariableSetHandle handle, const char *values);
62 
63  void setVariable(VariableHandle handle, double *values, unsigned dim);
64  void setVariable(VariableHandle handle, double value)
65  {
66  setVariable(handle, &value, 1);
67  }
68  void setVariable(VariableHandle handle, const char *values);
69 
70  bool isValid() const;
71  void getErrors(std::vector<std::string> &errors) const;
72  // bool isVariableUsed(VariableHandle variableHandle) const;
73 
75  const std::vector<double> &evalFP(ExprEvalHandle eeh);
76  const char *evalStr(ExprEvalHandle eeh);
77 
78  void resetEval()
79  {
80  exprToEval.clear();
81  exprEvaled.clear();
82  }
83 
84  void reset()
85  {
86  resetEval();
87  AllExprs.clear();
88  AllExternalVars.clear();
89  }
90 };
91 } // namespace KSeExpr
Expressions & dContext
Definition: ExprMultiExpr.h:21
const std::string & name() const
std::set< GlobalVal * > operandVars
Definition: ExprMultiExpr.h:27
std::set< DExpression * > operandExprs
Definition: ExprMultiExpr.h:26
ExprVarRef * resolveVar(const std::string &name) const override
DExpression(const std::string &varName, Expressions &context, const std::string &e, const ExprType &type=ExprType().FP(3), EvaluationStrategy be=defaultEvaluationStrategy)
abstract class for implementing variable references
Definition: Expression.h:36
main expression class
Definition: Expression.h:67
EvaluationStrategy
Types of evaluation strategies that are available.
Definition: Expression.h:70
const Context & context() const
Definition: Expression.h:218
static EvaluationStrategy defaultEvaluationStrategy
What evaluation strategy to use by default.
Definition: Expression.h:75
Expressions & operator=(Expressions &&)=default
void getErrors(std::vector< std::string > &errors) const
Expressions(const Expressions &)=default
Expressions & operator=(const Expressions &)=default
std::set< DExpression * > exprEvaled
Definition: ExprMultiExpr.h:38
void setLoopVariable(VariableSetHandle handle, double *values, unsigned dim)
Expressions(Expressions &&)=default
std::set< DExpression * > AllExprs
Definition: ExprMultiExpr.h:41
const std::vector< double > & evalFP(ExprEvalHandle eeh)
std::set< GlobalVal * > AllExternalVars
Definition: ExprMultiExpr.h:42
std::set< DExpression * > exprToEval
Definition: ExprMultiExpr.h:37
VariableHandle addExternalVariable(const std::string &variableName, ExprType seTy)
void setLoopVariable(VariableSetHandle handle, double value)
Definition: ExprMultiExpr.h:57
VariableSetHandle getLoopVarSetHandle(VariableHandle vh)
ExprHandle addExpression(const std::string &varName, ExprType seTy, const std::string &expr)
const char * evalStr(ExprEvalHandle eeh)
void setVariable(VariableHandle handle, double value)
Definition: ExprMultiExpr.h:64
void setVariable(VariableHandle handle, double *values, unsigned dim)
ExprEvalHandle getExprEvalHandle(ExprHandle eh)
std::pair< ExprHandle, std::vector< DExpression * > > ExprEvalHandle
Definition: ExprMultiExpr.h:17
std::set< GlobalVal * >::iterator VariableHandle
Definition: ExprMultiExpr.h:14
std::set< DExpression * >::iterator ExprHandle
Definition: ExprMultiExpr.h:16
std::set< GlobalVal * >::iterator VariableSetHandle
Definition: ExprMultiExpr.h:15