72 lines
3.1 KiB
72 lines
3.1 KiB
#include "src/storage/expressions/VariableExpression.h"
|
|
#include "src/utility/macros.h"
|
|
#include "src/exceptions/InvalidTypeException.h"
|
|
|
|
namespace storm {
|
|
namespace expressions {
|
|
VariableExpression::VariableExpression(Variable const& variable) : BaseExpression(variable.getManager(), variable.getType()), variable(variable) {
|
|
// Intentionally left empty.
|
|
}
|
|
|
|
std::string const& VariableExpression::getVariableName() const {
|
|
return variable.getName();
|
|
}
|
|
|
|
Variable const& VariableExpression::getVariable() const {
|
|
return variable;
|
|
}
|
|
|
|
bool VariableExpression::evaluateAsBool(Valuation const* valuation) const {
|
|
STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation.");
|
|
STORM_LOG_THROW(this->hasBooleanType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as boolean: return type is not a boolean.");
|
|
|
|
return valuation->getBooleanValue(this->getVariable());
|
|
}
|
|
|
|
int_fast64_t VariableExpression::evaluateAsInt(Valuation const* valuation) const {
|
|
STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation.");
|
|
STORM_LOG_THROW(this->hasIntegerType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as integer: return type is not an integer.");
|
|
|
|
return valuation->getIntegerValue(this->getVariable());
|
|
}
|
|
|
|
double VariableExpression::evaluateAsDouble(Valuation const* valuation) const {
|
|
STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation.");
|
|
STORM_LOG_THROW(this->hasNumericalType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as double: return type is not a double.");
|
|
|
|
if (this->getType().isIntegerType()) {
|
|
return static_cast<double>(valuation->getIntegerValue(this->getVariable()));
|
|
} else {
|
|
return valuation->getRationalValue(this->getVariable());
|
|
}
|
|
}
|
|
|
|
std::string const& VariableExpression::getIdentifier() const {
|
|
return this->getVariableName();
|
|
}
|
|
|
|
bool VariableExpression::containsVariables() const {
|
|
return true;
|
|
}
|
|
|
|
bool VariableExpression::isVariable() const {
|
|
return true;
|
|
}
|
|
|
|
void VariableExpression::gatherVariables(std::set<storm::expressions::Variable>& variables) const {
|
|
variables.insert(this->getVariable());
|
|
}
|
|
|
|
std::shared_ptr<BaseExpression const> VariableExpression::simplify() const {
|
|
return this->shared_from_this();
|
|
}
|
|
|
|
boost::any VariableExpression::accept(ExpressionVisitor& visitor) const {
|
|
return visitor.visit(*this);
|
|
}
|
|
|
|
void VariableExpression::printToStream(std::ostream& stream) const {
|
|
stream << this->getVariableName();
|
|
}
|
|
}
|
|
}
|