You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

74 lines
3.4 KiB

#ifndef STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_
#define STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_
#include <unordered_map>
#include "storm/adapters/RationalFunctionAdapter.h"
#include "storm/storage/expressions/Variable.h"
#include "storm/storage/expressions/Expression.h"
#include "storm/storage/expressions/ExprtkExpressionEvaluator.h"
#include "storm/storage/expressions/ToRationalFunctionVisitor.h"
#include "storm/storage/expressions/ToRationalNumberVisitor.h"
namespace storm {
namespace expressions {
template<typename RationalType>
class ExpressionEvaluator;
template<>
class ExpressionEvaluator<double> : public ExprtkExpressionEvaluator {
public:
ExpressionEvaluator(storm::expressions::ExpressionManager const& manager);
};
template<typename RationalType>
class ExpressionEvaluatorWithVariableToExpressionMap : public ExprtkExpressionEvaluatorBase<RationalType> {
public:
ExpressionEvaluatorWithVariableToExpressionMap(storm::expressions::ExpressionManager const& manager);
void setBooleanValue(storm::expressions::Variable const& variable, bool value) override;
void setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) override;
void setRationalValue(storm::expressions::Variable const& variable, double value) override;
protected:
// A mapping of variables to their expressions.
std::unordered_map<storm::expressions::Variable, storm::expressions::Expression> variableToExpressionMap;
};
#ifdef STORM_HAVE_CARL
template<>
class ExpressionEvaluator<RationalNumber> : public ExprtkExpressionEvaluatorBase<RationalNumber> {
public:
ExpressionEvaluator(storm::expressions::ExpressionManager const& manager);
void setBooleanValue(storm::expressions::Variable const& variable, bool value) override;
void setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) override;
void setRationalValue(storm::expressions::Variable const& variable, double value) override;
RationalNumber asRational(Expression const& expression) const override;
private:
// A visitor that can be used to translate expressions to rational numbers.
mutable ToRationalNumberVisitor<RationalNumber> rationalNumberVisitor;
};
template<>
class ExpressionEvaluator<RationalFunction> : public ExprtkExpressionEvaluatorBase<RationalFunction> {
public:
ExpressionEvaluator(storm::expressions::ExpressionManager const& manager);
void setBooleanValue(storm::expressions::Variable const& variable, bool value) override;
void setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) override;
void setRationalValue(storm::expressions::Variable const& variable, double value) override;
RationalFunction asRational(Expression const& expression) const override;
private:
// A visitor that can be used to translate expressions to rational functions.
mutable ToRationalFunctionVisitor<RationalFunction> rationalFunctionVisitor;
};
#endif
}
}
#endif /* STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_ */