#include "storm/storage/expressions/ExpressionEvaluator.h" #include "storm/storage/expressions/ExpressionManager.h" #include "storm/utility/constants.h" namespace storm { namespace expressions { ExpressionEvaluator::ExpressionEvaluator(storm::expressions::ExpressionManager const& manager) : ExprtkExpressionEvaluator(manager) { // Intentionally left empty. } template ExpressionEvaluatorWithVariableToExpressionMap::ExpressionEvaluatorWithVariableToExpressionMap(storm::expressions::ExpressionManager const& manager) : ExprtkExpressionEvaluatorBase(manager) { // Intentionally left empty. } template void ExpressionEvaluatorWithVariableToExpressionMap::setBooleanValue(storm::expressions::Variable const& variable, bool value) { ExprtkExpressionEvaluatorBase::setBooleanValue(variable, value); this->variableToExpressionMap[variable] = this->getManager().boolean(value); } template void ExpressionEvaluatorWithVariableToExpressionMap::setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) { ExprtkExpressionEvaluatorBase::setIntegerValue(variable, value); this->variableToExpressionMap[variable] = this->getManager().integer(value); } template void ExpressionEvaluatorWithVariableToExpressionMap::setRationalValue(storm::expressions::Variable const& variable, double value) { ExprtkExpressionEvaluatorBase::setRationalValue(variable, value); this->variableToExpressionMap[variable] = this->getManager().rational(value); } #ifdef STORM_HAVE_CARL ExpressionEvaluator::ExpressionEvaluator(storm::expressions::ExpressionManager const& manager) : ExprtkExpressionEvaluatorBase(manager), rationalNumberVisitor(*this) { // Intentionally left empty. } void ExpressionEvaluator::setBooleanValue(storm::expressions::Variable const& variable, bool value) { ExprtkExpressionEvaluatorBase::setBooleanValue(variable, value); // Not forwarding value of variable to rational number visitor as it cannot treat boolean variables anyway. } void ExpressionEvaluator::setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) { ExprtkExpressionEvaluatorBase::setIntegerValue(variable, value); rationalNumberVisitor.setMapping(variable, storm::utility::convertNumber(value)); } void ExpressionEvaluator::setRationalValue(storm::expressions::Variable const& variable, double value) { ExprtkExpressionEvaluatorBase::setRationalValue(variable, value); rationalNumberVisitor.setMapping(variable, storm::utility::convertNumber(value)); } RationalNumber ExpressionEvaluator::asRational(Expression const& expression) const { RationalNumber result = this->rationalNumberVisitor.toRationalNumber(expression); return result; } ExpressionEvaluator::ExpressionEvaluator(storm::expressions::ExpressionManager const& manager) : ExprtkExpressionEvaluatorBase(manager), rationalFunctionVisitor(*this) { // Intentionally left empty. } void ExpressionEvaluator::setBooleanValue(storm::expressions::Variable const& variable, bool value) { ExprtkExpressionEvaluatorBase::setBooleanValue(variable, value); // Not forwarding value of variable to rational number visitor as it cannot treat boolean variables anyway. } void ExpressionEvaluator::setIntegerValue(storm::expressions::Variable const& variable, int_fast64_t value) { ExprtkExpressionEvaluatorBase::setIntegerValue(variable, value); rationalFunctionVisitor.setMapping(variable, storm::utility::convertNumber(value)); } void ExpressionEvaluator::setRationalValue(storm::expressions::Variable const& variable, double value) { ExprtkExpressionEvaluatorBase::setRationalValue(variable, value); rationalFunctionVisitor.setMapping(variable, storm::utility::convertNumber(value)); } RationalFunction ExpressionEvaluator::asRational(Expression const& expression) const { return this->rationalFunctionVisitor.toRationalFunction(expression); } template class ExpressionEvaluatorWithVariableToExpressionMap; template class ExpressionEvaluatorWithVariableToExpressionMap; #endif } }