#ifndef STORM_ADAPTERS_DDEXPRESSIONADAPTER_H_ #define STORM_ADAPTERS_DDEXPRESSIONADAPTER_H_ #include #include "src/storage/expressions/Variable.h" #include "src/storage/expressions/Expressions.h" #include "src/storage/expressions/ExpressionVisitor.h" #include "src/storage/dd/Add.h" #include "src/storage/dd/Bdd.h" #include "src/storage/dd/DdManager.h" namespace storm { namespace adapters { template class AddExpressionAdapter : public storm::expressions::ExpressionVisitor { public: AddExpressionAdapter(std::shared_ptr> ddManager, std::shared_ptr> const& variableMapping); storm::dd::Add translateExpression(storm::expressions::Expression const& expression); storm::dd::Bdd translateBooleanExpression(storm::expressions::Expression const& expression); virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression) override; virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression) override; virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression) override; virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression) override; virtual boost::any visit(storm::expressions::VariableExpression const& expression) override; virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression) override; virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression) override; virtual boost::any visit(storm::expressions::BooleanLiteralExpression const& expression) override; virtual boost::any visit(storm::expressions::IntegerLiteralExpression const& expression) override; virtual boost::any visit(storm::expressions::DoubleLiteralExpression const& expression) override; private: // The manager responsible for the DDs built by this adapter. std::shared_ptr> ddManager; // This member maps the variables used in the expressions to the variables used by the DD manager. std::shared_ptr> variableMapping; }; } // namespace adapters } // namespace storm #endif /* STORM_ADAPTERS_DDEXPRESSIONADAPTER_H_ */