KSeExpr 6.0.0.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
8namespace KSeExpr
9{
10class DExpression;
11class GlobalVal;
12class Expressions;
13
14using VariableHandle = std::set<GlobalVal *>::iterator;
15using VariableSetHandle = std::set<GlobalVal *>::iterator;
16using ExprHandle = std::set<DExpression *>::iterator;
17using ExprEvalHandle = std::pair<ExprHandle, std::vector<DExpression *> >;
18
19class DExpression : public Expression
20{
22
23public:
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
40public:
41 std::set<DExpression *> AllExprs;
42 std::set<GlobalVal *> AllExternalVars;
43
44 // Expressions(int numberOfEvals=1);
45 Expressions() = default;
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);
58 {
59 setLoopVariable(handle, &value, 1);
60 }
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
const std::string & name() const
std::set< GlobalVal * > operandVars
std::set< DExpression * > operandExprs
ExprVarRef * resolveVar(const std::string &name) const override
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=(const Expressions &)=default
void getErrors(std::vector< std::string > &errors) const
Expressions(const Expressions &)=default
std::set< DExpression * > exprEvaled
void setLoopVariable(VariableSetHandle handle, double *values, unsigned dim)
Expressions(Expressions &&)=default
std::set< DExpression * > AllExprs
const std::vector< double > & evalFP(ExprEvalHandle eeh)
std::set< GlobalVal * > AllExternalVars
Expressions & operator=(Expressions &&)=default
std::set< DExpression * > exprToEval
VariableHandle addExternalVariable(const std::string &variableName, ExprType seTy)
void setLoopVariable(VariableSetHandle handle, double value)
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)
void setVariable(VariableHandle handle, double *values, unsigned dim)
ExprEvalHandle getExprEvalHandle(ExprHandle eh)
std::pair< ExprHandle, std::vector< DExpression * > > ExprEvalHandle
std::set< GlobalVal * >::iterator VariableHandle
std::set< DExpression * >::iterator ExprHandle
std::set< GlobalVal * >::iterator VariableSetHandle