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.
66 lines
1.4 KiB
66 lines
1.4 KiB
/*
|
|
* UnaryBooleanFunctionExpression.h
|
|
*
|
|
* Created on: 03.01.2013
|
|
* Author: chris
|
|
*/
|
|
|
|
#ifndef UNARYBOOLEANFUNCTIONEXPRESSION_H_
|
|
#define UNARYBOOLEANFUNCTIONEXPRESSION_H_
|
|
|
|
#include "src/ir/expressions/BaseExpression.h"
|
|
|
|
namespace storm {
|
|
|
|
namespace ir {
|
|
|
|
namespace expressions {
|
|
|
|
class UnaryBooleanFunctionExpression : public BaseExpression {
|
|
public:
|
|
enum FunctionType {NOT};
|
|
|
|
UnaryBooleanFunctionExpression(std::shared_ptr<BaseExpression> child, FunctionType functionType) : BaseExpression(bool_), child(child), functionType(functionType) {
|
|
|
|
}
|
|
|
|
virtual ~UnaryBooleanFunctionExpression() {
|
|
|
|
}
|
|
|
|
virtual bool getValueAsBool(std::pair<std::vector<bool>, std::vector<int_fast64_t>> const* variableValues) const {
|
|
bool resultChild = child->getValueAsBool(variableValues);
|
|
switch(functionType) {
|
|
case NOT: return !resultChild; break;
|
|
default: throw storm::exceptions::ExpressionEvaluationException() << "Cannot evaluate expression: "
|
|
<< "Unknown boolean unary operator: '" << functionType << "'.";
|
|
}
|
|
}
|
|
|
|
virtual ADD* toAdd() const {
|
|
ADD* childResult = child->toAdd();
|
|
return new ADD(~(*childResult));
|
|
}
|
|
|
|
virtual std::string toString() const {
|
|
std::string result = "";
|
|
switch (functionType) {
|
|
case NOT: result += "!"; break;
|
|
}
|
|
result += child->toString();
|
|
|
|
return result;
|
|
}
|
|
|
|
private:
|
|
std::shared_ptr<BaseExpression> child;
|
|
FunctionType functionType;
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* UNARYBOOLEANFUNCTIONEXPRESSION_H_ */
|