c0e357173d3d815d10bd08887850cb228ef5e140
[satune.git] / src / ASTTransform / preprocess.cc
1 #include "preprocess.h"
2 #include "boolean.h"
3 #include "csolver.h"
4 #include "tunable.h"
5 #include "iterator.h"
6
7 Preprocess::Preprocess(CSolver *_solver)
8         : Transform(_solver)
9 {
10 }
11
12 Preprocess::~Preprocess() {
13 }
14
15 void Preprocess::doTransform() {
16         if (!solver->isBooleanVarUsed() || solver->getTuner()->getTunable(PREPROCESS, &onoff) == 0)
17                 return;
18
19         BooleanIterator bit(solver);
20         while (bit.hasNext()) {
21                 Boolean *b = bit.next();
22                 if (b->type == BOOLEANVAR)
23                         processBooleanVar((BooleanVar *)b);
24         }
25         resolveBooleanVars();
26 }
27
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));
36                 }
37         }
38         delete iterator;
39 }
40
41 void Preprocess::processBooleanVar(BooleanVar *b) {
42         if (b->polarity == P_TRUE ||
43                         b->polarity == P_FALSE) {
44                 toremove.add(b);
45         }
46 }