1 #include "preprocess.h"
6 Preprocess::Preprocess(CSolver *_solver)
11 Preprocess::~Preprocess() {
14 void Preprocess::doTransform() {
15 if (solver->getTuner()->getTunable(PREPROCESS, &onoff) == 0)
18 SetIteratorBooleanEdge *iterator = solver->getConstraints();
19 while (iterator->hasNext()) {
20 BooleanEdge boolean = iterator->next();
21 Boolean *b = boolean.getBoolean();
28 void Preprocess::resolveBooleanVars() {
29 SetIteratorBoolean * iterator = toremove.iterator();
30 while (iterator->hasNext()) {
31 BooleanVar *bv = (BooleanVar *) iterator->next();
32 if (bv->polarity == P_TRUE) {
33 solver->replaceBooleanWithTrue(BooleanEdge(bv));
34 } else if (bv->polarity == P_FALSE) {
35 solver->replaceBooleanWithFalse(BooleanEdge(bv));
41 void Preprocess::transformBoolean(Boolean *b) {
42 if (!processed.add(b))
46 processBooleanVar((BooleanVar *)b);
49 processLogicOp((BooleanLogic *)b);
56 void Preprocess::processBooleanVar(BooleanVar * b) {
57 if (b->polarity==P_TRUE ||
58 b->polarity==P_FALSE) {
63 void Preprocess::processLogicOp(BooleanLogic * b) {
64 for(uint i=0; i < b->inputs.getSize(); i++)
65 transformBoolean(b->inputs.get(i).getBoolean());