One-hot encoding sat solution translator
authorHamed <hamed.gorjiara@gmail.com>
Wed, 12 Jul 2017 02:24:10 +0000 (19:24 -0700)
committerHamed <hamed.gorjiara@gmail.com>
Wed, 12 Jul 2017 02:24:10 +0000 (19:24 -0700)
src/Backend/sattranslator.c
src/Backend/sattranslator.h

index a768a4fa61d011cb047d8d0c4650ac548b5463ba..f6827f51e7f931a29bde2bda9675bdf3232b4d48 100644 (file)
@@ -13,6 +13,15 @@ uint64_t getElementValueBinaryIndexSATTranslator(CSolver* This, ElementEncoding*
        ASSERT(elemEnc->encArraySize >index && isinUseElement(elemEnc, index));
        return elemEnc->encodingArray[index];
 }
+uint64_t getElementValueOneHotSATTranslator(CSolver* This, ElementEncoding* elemEnc){
+       uint index=0;
+       for(int i=elemEnc->numVars-1;i>=0;i--) {
+               if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
+                       index = i;
+       }
+       ASSERT(elemEnc->encArraySize >index && isinUseElement(elemEnc, index));
+       return elemEnc->encodingArray[index];
+}
 uint64_t getElementValueSATTranslator(CSolver* This, Element* element){
        switch(getElementEncoding(element)->type){
                case ONEHOT:
index 5378cddb4ad150791bd8f0cdb439e500c4ec85af..ea0085c7bcd99b95e3316ba19951c25c1d079274 100644 (file)
@@ -11,6 +11,7 @@
 #include "classlist.h"
 
 bool getBooleanVariableValueSATTranslator( CSolver* This , Boolean* boolean);
+uint64_t getElementValueOneHotSATTranslator(CSolver* This, ElementEncoding* elemEnc);
 uint64_t getElementValueSATTranslator(CSolver* This, Element* element);
 
 #endif /* SATTRANSLATOR_H */