1 #include "naiveencoder.h"
2 #include "elementencoding.h"
4 #include "functionencoding.h"
12 #include "tableentry.h"
17 void naiveEncodingDecision(CSolver* csolver, SATEncoder* encoder){
18 uint size = getSizeVectorElement(csolver->allElements);
19 for(uint i=0; i<size; i++){
20 Element* element = getVectorElement(csolver->allElements, i);
21 switch(GETELEMENTTYPE(element)){
23 setElementEncodingType(getElementEncoding(element), BINARYINDEX);
24 //FIXME:Should be moved to SATEncoder
25 baseBinaryIndexElementAssign(getElementEncoding(element));
26 generateElementEncodingVariables(encoder,getElementEncoding(element));
30 setFunctionEncodingType(getElementFunctionEncoding((ElementFunction*)element),
31 ENUMERATEIMPLICATIONS);
38 size = getSizeVectorBoolean(csolver->allBooleans);
39 for(uint i=0; i<size; i++){
40 Boolean* boolean = getVectorBoolean(csolver->allBooleans, i);
41 switch(GETBOOLEANTYPE(boolean)){
43 setFunctionEncodingType(getPredicateFunctionEncoding((BooleanPredicate*)boolean),
44 ENUMERATEIMPLICATIONS);
47 setOrderEncodingType( ((BooleanOrder*)boolean)->order, PAIRWISE );
55 void baseBinaryIndexElementAssign(ElementEncoding *This) {
56 Element * element=This->element;
57 ASSERT(element->type == ELEMSET);
58 Set * set= ((ElementSet*)element)->set;
59 ASSERT(set->isRange==false);
60 uint size=getSizeVectorInt(set->members);
61 uint encSize=NEXTPOW2(size);
62 allocEncodingArrayElement(This, encSize);
63 allocInUseArrayElement(This, encSize);
65 for(uint i=0;i<size;i++) {
66 This->encodingArray[i]=getVectorInt(set->members, i);
67 setInUseElement(This, i);
69 This->numVars = NUMBITS(size-1);
70 This->variables = ourmalloc(sizeof(Constraint*)* This->numVars);