1 #include "sattranslator.h"
4 #include "satencoder.h"
6 uint64_t getElementValueBinaryIndexSATTranslator(CSolver* This, ElementEncoding* elemEnc){
8 for(int i=elemEnc->numVars-1;i>=0;i--) {
10 if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
13 ASSERT(elemEnc->encArraySize >index && isinUseElement(elemEnc, index));
14 return elemEnc->encodingArray[index];
17 uint64_t getElementValueBinaryValueSATTranslator(CSolver* This, ElementEncoding* elemEnc){
19 for(int i=elemEnc->numVars-1;i>=0;i--) {
21 if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
27 uint64_t getElementValueOneHotSATTranslator(CSolver* This, ElementEncoding* elemEnc){
29 for(int i=elemEnc->numVars-1;i>=0;i--) {
30 if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
33 ASSERT(elemEnc->encArraySize >index && isinUseElement(elemEnc, index));
34 return elemEnc->encodingArray[index];
37 uint64_t getElementValueUnarySATTranslator(CSolver* This, ElementEncoding* elemEnc){
39 for(int i=elemEnc->numVars-1;i>=0;i--) {
40 if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
43 ASSERT(elemEnc->encArraySize >index && isinUseElement(elemEnc, index));
44 return elemEnc->encodingArray[index];
47 uint64_t getElementValueSATTranslator(CSolver* This, Element* element){
48 ElementEncoding* elemEnc = getElementEncoding(element);
49 switch(elemEnc->type){
51 getElementValueOneHotSATTranslator(This, elemEnc);
54 getElementValueUnarySATTranslator(This, elemEnc);
57 return getElementValueBinaryIndexSATTranslator(This, elemEnc);
71 bool getBooleanVariableValueSATTranslator( CSolver* This , Boolean* boolean){
72 int index = getEdgeVar( ((BooleanVar*) boolean)->var );
73 return This->satEncoder->cnf->solver->solution[index] == true;