Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/constraint_compiler
[satune.git] / src / Encoders / elementencoding.c
1 #include "elementencoding.h"
2 #include "common.h"
3 #include "naiveencoder.h"
4 #include "element.h"
5 #include "satencoder.h"
6
7 void initElementEncoding(ElementEncoding * This, Element *element) {
8         This->element=element;
9         This->type=ELEM_UNASSIGNED;
10         This->variables=NULL;
11         This->encodingArray=NULL;
12         This->inUseArray=NULL;
13         This->numVars=0;
14         This->encArraySize=0;
15 }
16
17 void deleteElementEncoding(ElementEncoding *This) {
18         if (This->variables!=NULL)
19                 ourfree(This->variables);
20         if (This->encodingArray!=NULL)
21                 ourfree(This->encodingArray);
22         if (This->inUseArray!=NULL)
23                 ourfree(This->inUseArray);
24 }
25
26 void allocEncodingArrayElement(ElementEncoding *This, uint size) {
27         This->encodingArray=ourcalloc(1, sizeof(uint64_t)*size);
28         This->encArraySize=size;
29 }
30
31 void allocInUseArrayElement(ElementEncoding *This, uint size) {
32         This->inUseArray=ourcalloc(1, size >> 6);
33 }
34
35 void allocElementConstraintVariables(ElementEncoding* This, uint numVars){
36         This->numVars = numVars;
37         This->variables = ourmalloc(sizeof(Constraint*) * numVars);
38 }
39
40 void setElementEncodingType(ElementEncoding* This, ElementEncodingType type){
41         This->type = type;
42 }
43
44 void generateBinaryIndexEncodingVars(SATEncoder* encoder, ElementEncoding* This){
45         ASSERT(This->type==BINARYINDEX);
46         allocElementConstraintVariables(This, NUMBITS(This->encArraySize-1));
47         getArrayNewVarsSATEncoder(encoder, This->numVars, This->variables);
48 }
49
50 void generateElementEncodingVariables(SATEncoder* encoder, ElementEncoding* This){
51         ASSERT(This->type!=ELEM_UNASSIGNED);
52         ASSERT(This->variables==NULL);
53         switch(This->type){
54                 case BINARYINDEX:
55                         generateBinaryIndexEncodingVars(encoder, This);
56                         break;
57                 default:
58                         ASSERT(0);
59         }
60 }