5 void CSolver::replaceBooleanWithTrue(Boolean *bexpr) {
6 if (constraints.contains(bexpr)) {
7 constraints.remove(bexpr);
10 uint size = bexpr->parents.getSize();
11 for (uint i = 0; i < size; i++) {
12 Boolean *parent = bexpr->parents.get(i);
13 BooleanLogic *logicop = (BooleanLogic *) parent;
14 switch (logicop->op) {
16 handleANDTrue(logicop, bexpr);
19 replaceBooleanWithFalse(parent);
22 handleIFFTrue(logicop, bexpr);
32 void CSolver::replaceBooleanWithBoolean(Boolean *oldb, Boolean *newb) {
33 if (constraints.contains(oldb)) {
34 constraints.remove(oldb);
35 constraints.add(newb);
38 uint size = oldb->parents.getSize();
39 for (uint i = 0; i < size; i++) {
40 Boolean *parent = oldb->parents.get(i);
41 BooleanLogic *logicop = (BooleanLogic *) parent;
43 uint parentsize = logicop->inputs.getSize();
45 for (uint j = 0; j < parentsize; j++) {
46 Boolean *b = logicop->inputs.get(i);
48 logicop->inputs.set(i, newb);
49 newb->parents.push(parent);
55 void handleIFFFalse(BooleanLogic *bexpr, Boolean *child) {
56 uint size = bexpr->inputs.getSize();
57 Boolean *b = bexpr->inputs.get(0);
58 uint childindex = (b == child) ? 0 : 1;
59 bexpr->inputs.remove(childindex);
63 void CSolver::handleIFFTrue(BooleanLogic *bexpr, Boolean *child) {
64 uint size = bexpr->inputs.getSize();
65 Boolean *b = bexpr->inputs.get(0);
66 uint otherindex = (b == child) ? 1 : 0;
67 replaceBooleanWithBoolean(bexpr, bexpr->inputs.get(otherindex));
70 void CSolver::handleANDTrue(BooleanLogic *bexpr, Boolean *child) {
71 uint size = bexpr->inputs.getSize();
74 replaceBooleanWithTrue(bexpr);
78 for (uint i = 0; i < size; i++) {
79 Boolean *b = bexpr->inputs.get(i);
81 bexpr->inputs.remove(i);
86 replaceBooleanWithBoolean(bexpr, bexpr->inputs.get(0));
90 void CSolver::replaceBooleanWithFalse(Boolean *bexpr) {
91 if (constraints.contains(bexpr)) {
93 constraints.remove(bexpr);
96 uint size = bexpr->parents.getSize();
97 for (uint i = 0; i < size; i++) {
98 Boolean *parent = bexpr->parents.get(i);
99 BooleanLogic *logicop = (BooleanLogic *) parent;
100 switch (logicop->op) {
102 replaceBooleanWithFalse(parent);
105 replaceBooleanWithTrue(parent);
108 handleIFFFalse(logicop, bexpr);