X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FEncoders%2Fnaiveencoder.cc;fp=src%2FEncoders%2Fnaiveencoder.cc;h=3f9e44eeaad1df92acc6654a93d5089b43e36ff2;hp=0de7043b2d51472cc58089b1e5fa9bbe44015bfe;hb=a79d8bc322e551f909de6757484480bcf6cbc55d;hpb=3ea7df0292dcc11b7a60a186d375bda980d771e5 diff --git a/src/Encoders/naiveencoder.cc b/src/Encoders/naiveencoder.cc index 0de7043..3f9e44e 100644 --- a/src/Encoders/naiveencoder.cc +++ b/src/Encoders/naiveencoder.cc @@ -11,18 +11,19 @@ #include "table.h" #include "tableentry.h" #include "order.h" +#include "tunable.h" #include void naiveEncodingDecision(CSolver *This) { SetIteratorBooleanEdge *iterator = This->getConstraints(); while (iterator->hasNext()) { BooleanEdge b = iterator->next(); - naiveEncodingConstraint(b.getBoolean()); + naiveEncodingConstraint(This, b.getBoolean()); } delete iterator; } -void naiveEncodingConstraint(Boolean *This) { +void naiveEncodingConstraint(CSolver *csolver, Boolean *This) { switch (This->type) { case BOOLEANVAR: { return; @@ -33,11 +34,11 @@ void naiveEncodingConstraint(Boolean *This) { return; } case LOGICOP: { - naiveEncodingLogicOp((BooleanLogic *) This); + naiveEncodingLogicOp(csolver, (BooleanLogic *) This); return; } case PREDICATEOP: { - naiveEncodingPredicate((BooleanPredicate *) This); + naiveEncodingPredicate(csolver, (BooleanPredicate *) This); return; } default: @@ -45,30 +46,30 @@ void naiveEncodingConstraint(Boolean *This) { } } -void naiveEncodingLogicOp(BooleanLogic *This) { +void naiveEncodingLogicOp(CSolver *csolver, BooleanLogic *This) { for (uint i = 0; i < This->inputs.getSize(); i++) { - naiveEncodingConstraint(This->inputs.get(i).getBoolean()); + naiveEncodingConstraint(csolver, This->inputs.get(i).getBoolean()); } } -void naiveEncodingPredicate(BooleanPredicate *This) { +void naiveEncodingPredicate(CSolver *csolver, BooleanPredicate *This) { FunctionEncoding *encoding = This->getFunctionEncoding(); if (encoding->getFunctionEncodingType() == FUNC_UNASSIGNED) This->getFunctionEncoding()->setFunctionEncodingType(ENUMERATEIMPLICATIONS); for (uint i = 0; i < This->inputs.getSize(); i++) { Element *element = This->inputs.get(i); - naiveEncodingElement(element); + naiveEncodingElement(csolver, element); } } -void naiveEncodingElement(Element *This) { +void naiveEncodingElement(CSolver *csolver, Element *This) { ElementEncoding *encoding = This->getElementEncoding(); if (encoding->getElementEncodingType() == ELEM_UNASSIGNED) { if (This->type != ELEMCONST) { model_print("INFO: naive encoder is making the decision about element %p....\n", This); } - encoding->setElementEncodingType(UNARY); + encoding->setElementEncodingType((ElementEncodingType)csolver->getTuner()->getVarTunable(This->getRange()->getType(), NAIVEENCODER, &NaiveEncodingDesc)); encoding->encodingArrayInitialization(); } @@ -76,7 +77,7 @@ void naiveEncodingElement(Element *This) { ElementFunction *function = (ElementFunction *) This; for (uint i = 0; i < function->inputs.getSize(); i++) { Element *element = function->inputs.get(i); - naiveEncodingElement(element); + naiveEncodingElement(csolver, element); } FunctionEncoding *encoding = function->getElementFunctionEncoding(); if (encoding->getFunctionEncodingType() == FUNC_UNASSIGNED)