48 bool firstOperandEvaluation = this->
getFirstOperand()->evaluateAsBool(valuation);
49 bool secondOperandEvaluation = this->
getSecondOperand()->evaluateAsBool(valuation);
54 result = firstOperandEvaluation && secondOperandEvaluation;
57 result = firstOperandEvaluation || secondOperandEvaluation;
60 result = firstOperandEvaluation ^ secondOperandEvaluation;
63 result = !firstOperandEvaluation || secondOperandEvaluation;
66 result = (firstOperandEvaluation && secondOperandEvaluation) || (!firstOperandEvaluation && !secondOperandEvaluation);
74 std::shared_ptr<BaseExpression const> firstOperandSimplified = this->
getFirstOperand()->simplify();
75 std::shared_ptr<BaseExpression const> secondOperandSimplified = this->
getSecondOperand()->simplify();
77 if (firstOperandSimplified->isLiteral() || secondOperandSimplified->isLiteral()) {
80 if (firstOperandSimplified->isTrue()) {
81 return secondOperandSimplified;
82 }
else if (firstOperandSimplified->isFalse()) {
83 return firstOperandSimplified;
84 }
else if (secondOperandSimplified->isTrue()) {
85 return firstOperandSimplified;
86 }
else if (secondOperandSimplified->isFalse()) {
87 return secondOperandSimplified;
91 if (firstOperandSimplified->isTrue()) {
92 return firstOperandSimplified;
93 }
else if (firstOperandSimplified->isFalse()) {
94 return secondOperandSimplified;
95 }
else if (secondOperandSimplified->isTrue()) {
96 return secondOperandSimplified;
97 }
else if (secondOperandSimplified->isFalse()) {
98 return firstOperandSimplified;
102 if (firstOperandSimplified->isTrue()) {
103 if (secondOperandSimplified->isFalse()) {
104 return firstOperandSimplified;
105 }
else if (secondOperandSimplified->isTrue()) {
108 }
else if (firstOperandSimplified->isFalse()) {
109 if (secondOperandSimplified->isTrue()) {
110 return secondOperandSimplified;
111 }
else if (secondOperandSimplified->isFalse()) {
117 if (firstOperandSimplified->isTrue()) {
118 return secondOperandSimplified;
119 }
else if (firstOperandSimplified->isFalse()) {
121 }
else if (secondOperandSimplified->isTrue()) {
126 if (firstOperandSimplified->isTrue() && secondOperandSimplified->isTrue()) {
128 }
else if (firstOperandSimplified->isFalse() && secondOperandSimplified->isFalse()) {
130 }
else if (firstOperandSimplified->isTrue() && secondOperandSimplified->isFalse()) {
132 }
else if (firstOperandSimplified->isFalse() && secondOperandSimplified->isTrue()) {
135 if (firstOperandSimplified->isTrue()) {
136 return secondOperandSimplified;
138 if (secondOperandSimplified->isTrue()) {
139 return firstOperandSimplified;
141 if (firstOperandSimplified->isFalse()) {
145 if (secondOperandSimplified->isFalse()) {
154 if (firstOperandSimplified.get() == this->getFirstOperand().get() && secondOperandSimplified.get() == this->getSecondOperand().get()) {
155 return this->shared_from_this();
157 return std::shared_ptr<BaseExpression>(
BinaryBooleanFunctionExpression(ExpressionManager const &manager, Type const &type, std::shared_ptr< BaseExpression const > const &firstOperand, std::shared_ptr< BaseExpression const > const &secondOperand, OperatorType operatorType)
Creates a binary boolean function expression with the given return type, operands and operator.