+
+BooleanEdge CSolver::doRewrite(BooleanEdge bexpr) {
+ bool isNegated=bexpr.isNegated();
+ BooleanLogic * b = (BooleanLogic *) bexpr.getBoolean();
+ BooleanEdge result;
+ if (b->op == SATC_IFF) {
+ if (isTrue(b->inputs.get(0))) {
+ result = b->inputs.get(1);
+ } else if (isFalse(b->inputs.get(0))) {
+ result = b->inputs.get(1).negate();
+ } else if (isTrue(b->inputs.get(1))) {
+ result = b->inputs.get(0);
+ } else if (isFalse(b->inputs.get(1))) {
+ result = b->inputs.get(0).negate();
+ } else ASSERT(0);
+ } else if (b->op==SATC_AND) {
+ uint size = b->inputs.getSize();
+ if (size == 0)
+ result = boolTrue;
+ else if (size == 1)
+ result = b->inputs.get(0);
+ else ASSERT(0);
+ }
+ return isNegated ? result.negate() : result;
+}