#ifndef STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ #define STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ #include "storm/storage/expressions/Expression.h" namespace storm { namespace expressions { template<typename RationalReturnType> class ExpressionEvaluatorBase { public: ExpressionEvaluatorBase(storm::expressions::ExpressionManager const& manager); virtual ~ExpressionEvaluatorBase() = default; virtual bool asBool(Expression const& expression) const = 0; virtual int_fast64_t asInt(Expression const& expression) const = 0; virtual RationalReturnType asRational(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<storm::expressions::ExpressionManager const> manager; }; } } #endif /* STORM_STORAGE_EXPRESSIONS_EXPRESSIONEVALUATORBASE_H_ */