Merging with branch scratch and cleaning the code
[satune.git] / src / Encoders / naiveencoder.cc
index 35c62e8466fccc48c7521e708a233cf96d908b1b..7e33c1b26ca8fd307a4235c37891f3dd2fedde00 100644 (file)
 #include <strings.h>
 
 void naiveEncodingDecision(CSolver *This) {
-       HSIteratorBoolean *iterator=This->getConstraints();
-       while(iterator->hasNext()) {
-               Boolean *boolean = iterator->next();
-               naiveEncodingConstraint(boolean);
+       SetIteratorBooleanEdge *iterator = This->getConstraints();
+       while (iterator->hasNext()) {
+               BooleanEdge b = iterator->next();
+               naiveEncodingConstraint(b.getBoolean());
        }
        delete iterator;
 }
 
 void naiveEncodingConstraint(Boolean *This) {
-       switch (GETBOOLEANTYPE(This)) {
+       switch (This->type) {
        case BOOLEANVAR: {
                return;
        }
        case ORDERCONST: {
-               ((BooleanOrder *) This)->order->setOrderEncodingType(PAIRWISE);
+               if (((BooleanOrder *) This)->order->encoding.type == ORDER_UNASSIGNED)
+                       ((BooleanOrder *) This)->order->setOrderEncodingType(PAIRWISE);
                return;
        }
        case LOGICOP: {
@@ -46,7 +47,7 @@ void naiveEncodingConstraint(Boolean *This) {
 
 void naiveEncodingLogicOp(BooleanLogic *This) {
        for (uint i = 0; i < This->inputs.getSize(); i++) {
-               naiveEncodingConstraint(This->inputs.get(i));
+               naiveEncodingConstraint(This->inputs.get(i).getBoolean());
        }
 }
 
@@ -62,21 +63,24 @@ void naiveEncodingPredicate(BooleanPredicate *This) {
 }
 
 void naiveEncodingElement(Element *This) {
-       ElementEncoding *encoding = getElementEncoding(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(BINARYINDEX);
                encoding->encodingArrayInitialization();
        }
 
-       if (GETELEMENTTYPE(This) == ELEMFUNCRETURN) {
+       if (This->type == ELEMFUNCRETURN) {
                ElementFunction *function = (ElementFunction *) This;
                for (uint i = 0; i < function->inputs.getSize(); i++) {
                        Element *element = function->inputs.get(i);
                        naiveEncodingElement(element);
                }
-               FunctionEncoding *encoding = getElementFunctionEncoding(function);
+               FunctionEncoding *encoding = function->getElementFunctionEncoding();
                if (encoding->getFunctionEncodingType() == FUNC_UNASSIGNED)
-                       getElementFunctionEncoding(function)->setFunctionEncodingType(ENUMERATEIMPLICATIONS);
+                       function->getElementFunctionEncoding()->setFunctionEncodingType(ENUMERATEIMPLICATIONS);
        }
 }