diff --git a/src/storage/expressions/ExpressionEvaluator.cpp b/src/storage/expressions/ExpressionEvaluator.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/storage/expressions/ExpressionEvaluator.h b/src/storage/expressions/ExpressionEvaluator.h new file mode 100644 index 000000000..5291029c4 --- /dev/null +++ b/src/storage/expressions/ExpressionEvaluator.h @@ -0,0 +1,11 @@ +namespace storm { + namespace expressions { + template + class ExpressionEvaluator; + + template<> + class ExpressionEvaluator { + + } + } +} \ No newline at end of file diff --git a/src/storage/expressions/ExpressionEvaluatorBase.cpp b/src/storage/expressions/ExpressionEvaluatorBase.cpp new file mode 100644 index 000000000..1eb76b10b --- /dev/null +++ b/src/storage/expressions/ExpressionEvaluatorBase.cpp @@ -0,0 +1,15 @@ +#include "src/storage/expressions/ExpressionEvaluatorBase.h" + +#include "src/storage/expressions/ExpressionManager.h" + +namespace storm { + namespace expressions { + ExpressionEvaluatorBase::ExpressionEvaluatorBase(storm::expressions::ExpressionManager const& manager) : manager(manager.getSharedPointer()) { + // Intentionally left empty. + } + + storm::expressions::ExpressionManager const& ExpressionEvaluatorBase::getManager() const { + return *manager; + } + } +} \ No newline at end of file diff --git a/src/storage/expressions/ExpressionEvaluatorBase.h b/src/storage/expressions/ExpressionEvaluatorBase.h new file mode 100644 index 000000000..53a848611 --- /dev/null +++ b/src/storage/expressions/ExpressionEvaluatorBase.h @@ -0,0 +1,35 @@ +#ifndef STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ +#define STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ + +#include "src/storage/expressions/Expression.h" + +namespace storm { + namespace expressions { + class ExpressionEvaluatorBase { + public: + ExpressionEvaluatorBase(storm::expressions::ExpressionManager const& manager); + + virtual bool asBool(Expression const& expression) const = 0; + virtual int_fast64_t asInt(Expression const& expression) const = 0; + virtual double asDouble(Expression const& expression) const = 0; + + virtual void setBooleanValue(storm::expressions::Variable const& variable, bool value) = 0; + virtual void setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) = 0; + virtual void setRationalValue(storm::expressions::Variable const& variable, double value) = 0; + + protected: + /*! + * Retrieves the manager associated with this evaluator. + * + * @return The manager associated with this evaluator. + */ + storm::expressions::ExpressionManager const& getManager() const; + + private: + // The expression manager that is used by this evaluator. + std::shared_ptr manager; + }; + } +} + +#endif /* STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ */ \ No newline at end of file diff --git a/src/storage/expressions/ExprtkExpressionEvaluator.cpp b/src/storage/expressions/ExprtkExpressionEvaluator.cpp index 9cec207af..58d6176d3 100644 --- a/src/storage/expressions/ExprtkExpressionEvaluator.cpp +++ b/src/storage/expressions/ExprtkExpressionEvaluator.cpp @@ -5,7 +5,7 @@ namespace storm { namespace expressions { - ExprtkExpressionEvaluator::ExprtkExpressionEvaluator(storm::expressions::ExpressionManager const& manager) : manager(manager.getSharedPointer()), booleanValues(manager.getNumberOfBooleanVariables()), integerValues(manager.getNumberOfIntegerVariables()), rationalValues(manager.getNumberOfRationalVariables()) { + ExprtkExpressionEvaluator::ExprtkExpressionEvaluator(storm::expressions::ExpressionManager const& manager) : ExpressionEvaluatorBase(manager), booleanValues(manager.getNumberOfBooleanVariables()), integerValues(manager.getNumberOfIntegerVariables()), rationalValues(manager.getNumberOfRationalVariables()) { for (auto const& variableTypePair : manager) { if (variableTypePair.second.isBooleanType()) { diff --git a/src/storage/expressions/ExprtkExpressionEvaluator.h b/src/storage/expressions/ExprtkExpressionEvaluator.h index 41cc313c3..c84276ef2 100644 --- a/src/storage/expressions/ExprtkExpressionEvaluator.h +++ b/src/storage/expressions/ExprtkExpressionEvaluator.h @@ -1,18 +1,17 @@ -#ifndef STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_ -#define STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_ +#ifndef STORM_STORAGE_EXPRESSIONS_EXPRTKEXPRESSIONEVALUATOR_H_ +#define STORM_STORAGE_EXPRESSIONS_EXPRTKEXPRESSIONEVALUATOR_H_ #include #include -#include "exprtk.hpp" +#include "src/storage/expressions/ExpressionEvaluatorBase.h" -#include "src/storage/expressions/Expression.h" -#include "src/storage/expressions/ExpressionVisitor.h" +#include "exprtk.hpp" #include "src/storage/expressions/ToExprtkStringVisitor.h" namespace storm { namespace expressions { - class ExprtkExpressionEvaluator { + class ExprtkExpressionEvaluator : public ExpressionEvaluatorBase { public: /*! * Creates an expression evaluator that is capable of evaluating expressions managed by the given manager. @@ -40,10 +39,7 @@ namespace storm { * @param expression The expression that is to be compiled. */ CompiledExpressionType& getCompiledExpression(BaseExpression const* expression) const; - - // The expression manager that is used by this evaluator. - std::shared_ptr manager; - + // The parser used. mutable exprtk::parser parser; @@ -61,4 +57,4 @@ namespace storm { } } -#endif /* STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATOR_H_ */ \ No newline at end of file +#endif /* STORM_STORAGE_EXPRESSIONS_EXPRTKEXPRESSIONEVALUATOR_H_ */ \ No newline at end of file