12namespace expressions {
13template<
typename RationalType>
17 symbolTable(
std::make_unique<exprtk::symbol_table<
ValueType>>()),
18 booleanValues(manager.getNumberOfBooleanVariables()),
19 integerValues(manager.getNumberOfIntegerVariables()),
20 rationalValues(manager.getNumberOfRationalVariables()) {
25 parser->settings().set_max_stack_depth(10000);
26 for (
auto const& variableTypePair : manager) {
27 if (variableTypePair.second.isBooleanType()) {
28 symbolTable->add_variable(
"v" + std::to_string(variableTypePair.first.getIndex()), this->booleanValues[variableTypePair.first.getOffset()]);
29 }
else if (variableTypePair.second.isIntegerType()) {
30 symbolTable->add_variable(
"v" + std::to_string(variableTypePair.first.getIndex()), this->integerValues[variableTypePair.first.getOffset()]);
31 }
else if (variableTypePair.second.isRationalType()) {
32 symbolTable->add_variable(
"v" + std::to_string(variableTypePair.first.getIndex()), this->rationalValues[variableTypePair.first.getOffset()]);
37template<
typename RationalType>
39 auto const& compiledExpression = getCompiledExpression(expression);
40 return compiledExpression.value() ==
ValueType(1);
43template<
typename RationalType>
45 auto const& compiledExpression = getCompiledExpression(expression);
46 return static_cast<int_fast64_t
>(compiledExpression.value());
49template<
typename RationalType>
54 compiledExpression.register_symbol_table(*symbolTable);
57 "Expression was not properly parsed by ExprTk: " << expression <<
". (Returned error: " << parser->error() <<
")");
63template<
typename RationalType>
68template<
typename RationalType>
73template<
typename RationalType>
84 return static_cast<double>(compiledExpression.value());
virtual bool isExprtkCompiledExpression() const
ExprtkCompiledExpression & asExprtkCompiledExpression()
void setCompiledExpression(std::shared_ptr< CompiledExpression > const &compiledExpression) const
Associates the given compiled expression with this expression object.
bool hasCompiledExpression() const
Retrieves whether this expression object has an associated compiled expression.
CompiledExpression const & getCompiledExpression() const
Retrieves the associated compiled expression object (if there is any).
This class is responsible for managing a set of typed variables and all expressions using these varia...
CompiledExpressionType const & getCompiledExpression() const
void setIntegerValue(storm::expressions::Variable const &variable, int_fast64_t value) override
ExprtkExpressionEvaluatorBase(storm::expressions::ExpressionManager const &manager)
bool asBool(Expression const &expression) const override
void setBooleanValue(storm::expressions::Variable const &variable, bool value) override
int_fast64_t asInt(Expression const &expression) const override
CompiledExpressionType const & getCompiledExpression(storm::expressions::Expression const &expression) const
Retrieves a compiled version of the given expression.
ExprtkCompiledExpression::CompiledExpressionType CompiledExpressionType
void setRationalValue(storm::expressions::Variable const &variable, double value) override
double asRational(Expression const &expression) const override
ExprtkExpressionEvaluator(storm::expressions::ExpressionManager const &manager)
Creates an expression evaluator that is capable of evaluating expressions managed by the given manage...
uint_fast64_t getOffset() const
Retrieves the offset of the variable in the group of all equally typed variables.
#define STORM_LOG_THROW(cond, exception, message)