6 BooleanIterator::BooleanIterator(CSolver * _solver) :
7 solverit(_solver->getConstraints()) {
11 BooleanIterator::~BooleanIterator() {
15 bool BooleanIterator::hasNext() {
16 return boolean.getSize() != 0;
19 void BooleanIterator::updateNext() {
20 if (boolean.getSize() != 0) {
26 if (boolean.getSize() == 0) {
27 if (solverit->hasNext()) {
28 Boolean *b=solverit->next().getBoolean();
29 if (discovered.add(b)) {
37 Boolean *topboolean=boolean.last();
38 uint topindex=index.last();
39 switch(topboolean->type) {
46 BooleanLogic * logicop=(BooleanLogic*) topboolean;
47 uint size=logicop->inputs.getSize();
51 index.push(topindex+1);
52 Boolean *newchild=logicop->inputs.get(topindex).getBoolean();
53 if (discovered.add(newchild)) {
54 boolean.push(newchild);
65 Boolean * BooleanIterator::next() {
66 Boolean * b = boolean.last();
71 ElementIterator::ElementIterator(CSolver *_solver) :
78 ElementIterator::~ElementIterator() {
81 bool ElementIterator::hasNext() {
82 return element.getSize() != 0;
85 void ElementIterator::updateNext() {
86 if (element.getSize() != 0) {
92 if (element.getSize() == 0) {
94 if (baseindex == base->inputs.getSize()) {
98 Element * e = base->inputs.get(baseindex);
100 if (discovered.add(e)) {
107 Boolean *b=bit.next();
108 if (b->type == PREDICATEOP) {
109 base = (BooleanPredicate *)b;
117 Element *topelement=element.last();
118 uint topindex=index.last();
119 switch(topelement->type) {
123 case ELEMFUNCRETURN: {
124 ElementFunction * func=(ElementFunction*) topelement;
125 uint size=func->inputs.getSize();
126 if (topindex == size)
129 index.push(topindex+1);
130 Element *newchild=func->inputs.get(topindex);
131 if (discovered.add(newchild)) {
132 element.push(newchild);
143 Element * ElementIterator::next() {
144 Element * e = element.last();