You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

84 lines
1.7 KiB

/*
* BooleanConstantExpression.h
*
* Created on: 04.01.2013
* Author: chris
*/
#ifndef BOOLEANCONSTANTEXPRESSION_H_
#define BOOLEANCONSTANTEXPRESSION_H_
#include "ConstantExpression.h"
#include "src/utility/CuddUtility.h"
#include <boost/lexical_cast.hpp>
namespace storm {
namespace ir {
namespace expressions {
class BooleanConstantExpression : public ConstantExpression {
public:
BooleanConstantExpression(std::string constantName) : ConstantExpression(bool_, constantName) {
defined = false;
value = false;
}
virtual ~BooleanConstantExpression() {
}
virtual bool getValueAsBool(std::pair<std::vector<bool>, std::vector<int_fast64_t>> const* variableValues) const {
if (!defined) {
throw storm::exceptions::ExpressionEvaluationException() << "Cannot evaluate expression: "
<< "Boolean constant '" << this->getConstantName() << "' is undefined.";
} else {
return value;
}
}
virtual ADD* toAdd() const {
if (!defined) {
throw storm::exceptions::ExpressionEvaluationException() << "Cannot evaluate expression: "
<< "Boolean constant '" << this->getConstantName() << "' is undefined.";
}
storm::utility::CuddUtility* cuddUtility = storm::utility::cuddUtilityInstance();
return new ADD(*cuddUtility->getConstant(value ? 1 : 0));
}
virtual std::string toString() const {
std::string result = this->constantName;
if (defined) {
result += "[" + boost::lexical_cast<std::string>(value) + "]";
}
return result;
}
bool isDefined() {
return defined;
}
bool getValue() {
return value;
}
void define(bool value) {
defined = true;
this->value = value;
}
bool value;
bool defined;
};
}
}
}
#endif /* BOOLEANCONSTANTEXPRESSION_H_ */