for(uint i=0;i<numInputs;i++) {
pushVectorASTNode(GETELEMENTPARENTS(inputs[i]), (ASTNode *)This);
}
+ initPredicateEncoding(&This->encoding, (Boolean *) This);
+
return & This->base;
}
void deleteBoolean(Boolean * This) {
switch(GETBOOLEANTYPE(This)){
- case PREDICATEOP:
- deleteInlineArrayElement(& ((BooleanPredicate*)This)->inputs );
- break;
- default:
- break;
+ case PREDICATEOP: {
+ BooleanPredicate *bp=(BooleanPredicate *)This;
+ deleteInlineArrayElement(& bp->inputs );
+ deleteFunctionEncoding(& bp->encoding);
+ break;
+ }
+ default:
+ break;
}
deleteVectorArrayBoolean(GETBOOLEANPARENTS(This));
ourfree(This);
#include "ops.h"
#include "structs.h"
#include "astnode.h"
+#include "functionencoding.h"
/**
This is a little sketchy, but apparently legit.
struct BooleanPredicate {
Boolean base;
Predicate * predicate;
+ FunctionEncoding encoding;
ArrayElement inputs;
};
ElementSet * tmp=(ElementSet *)ourmalloc(sizeof(ElementSet));
GETELEMENTTYPE(tmp)= ELEMSET;
tmp->set=s;
- tmp->encoding=NULL;
allocInlineDefVectorASTNode(GETELEMENTPARENTS(tmp));
+ initElementEncoding(&tmp->encoding, (Element *) tmp);
return &tmp->base;
}
allocInlineDefVectorASTNode(GETELEMENTPARENTS(tmp));
for(uint i=0;i<numArrays;i++)
pushVectorASTNode(GETELEMENTPARENTS(array[i]), (ASTNode *) tmp);
+ initElementEncoding(&tmp->domainencoding, (Element *) tmp);
+ initFunctionEncoding(&tmp->functionencoding, (Element *) tmp);
return &tmp->base;
}
void deleteElement(Element *This) {
switch(GETELEMENTTYPE(This)) {
- case ELEMFUNCRETURN:
- deleteInlineArrayElement(&((ElementFunction *)This)->inputs);
+ case ELEMFUNCRETURN: {
+ ElementFunction *ef = (ElementFunction *) This;
+ deleteInlineArrayElement(&ef->inputs);
+ deleteElementEncoding(&ef->domainencoding);
+ deleteFunctionEncoding(&ef->functionencoding);
break;
+ }
+ case ELEMSET: {
+ ElementSet *es = (ElementSet *) This;
+ deleteElementEncoding(&es->encoding);
+ break;
+ }
default:
;
}
deleteVectorArrayASTNode(GETELEMENTPARENTS(This));
+
ourfree(This);
}
#include "mymemory.h"
#include "structs.h"
#include "astnode.h"
+#include "functionencoding.h"
+#include "elementencoding.h"
#define GETELEMENTTYPE(o) GETASTNODETYPE(o)
#define GETELEMENTPARENTS(o) (&((Element*)o)->parents)
struct ElementSet {
Element base;
Set * set;
- ElementEncoding * encoding;
+ ElementEncoding encoding;
};
struct ElementFunction {
Function * function;
ArrayElement inputs;
Boolean * overflowstatus;
+ FunctionEncoding functionencoding;
+ ElementEncoding domainencoding;
};
Element * allocElementSet(Set *s);
#include "elementencoding.h"
-ElementEncoding * allocElementEncoding(ElementEncodingType type, Element *element) {
- ElementEncoding * This=ourmalloc(sizeof(ElementEncoding));
+void initElementEncoding(ElementEncoding * This, Element *element) {
This->element=element;
- This->type=type;
+ This->type=ELEM_UNASSIGNED;
This->variables=NULL;
This->encodingArray=NULL;
This->numVars=0;
- return This;
}
void deleteElementEncoding(ElementEncoding *This) {
ourfree(This->encodingArray);
if (This->inUseArray!=NULL)
ourfree(This->inUseArray);
- ourfree(This);
}
void allocEncodingArrayElement(ElementEncoding *This, uint size) {
#include "classlist.h"
enum ElementEncodingType {
- ONEHOT, UNARY, BINARYINDEX, ONEHOTBINARY, BINARYVAL
+ ELEM_UNASSIGNED, ONEHOT, UNARY, BINARYINDEX, ONEHOTBINARY, BINARYVAL
};
typedef enum ElementEncodingType ElementEncodingType;
uint numVars; /* Number of variables */
};
-ElementEncoding * allocElementEncoding(ElementEncodingType type, Element *element);
+void initElementEncoding(ElementEncoding *This, Element *element);
void deleteElementEncoding(ElementEncoding *This);
void baseBinaryIndexElementAssign(ElementEncoding *This);
void allocEncodingArrayElement(ElementEncoding *This, uint size);
#include "functionencoding.h"
-FunctionEncoding * allocFunctionEncoding(FunctionEncodingType type, Element *function) {
- FunctionEncoding * This=ourmalloc(sizeof(FunctionEncoding));
+void initFunctionEncoding(FunctionEncoding *This, Element *function) {
This->op.function=function;
- This->type=type;
- return This;
+ This->type=FUNC_UNASSIGNED;
}
-FunctionEncoding * allocPredicateEncoding(FunctionEncodingType type, Boolean *predicate) {
- FunctionEncoding * This=ourmalloc(sizeof(FunctionEncoding));
+void initPredicateEncoding(FunctionEncoding *This, Boolean *predicate) {
This->op.predicate=predicate;
- This->type=type;
- return This;
+ This->type=FUNC_UNASSIGNED;
}
-void deleteFunctionEncoding(FunctionEncoding *fe) {
- ourfree(fe);
+void deleteFunctionEncoding(FunctionEncoding *This) {
}
#include "classlist.h"
enum FunctionEncodingType {
- ENUMERATEIMPLICATIONS, CIRCUIT
+ FUNC_UNASSIGNED, ENUMERATEIMPLICATIONS, CIRCUIT
};
typedef enum FunctionEncodingType FunctionEncodingType;
ElementPredicate op;
};
-FunctionEncoding * allocFunctionEncoding(FunctionEncodingType type, Element *function);
-FunctionEncoding * allocPredicateEncoding(FunctionEncodingType type, Boolean *predicate);
+void initFunctionEncoding(FunctionEncoding *encoding, Element *function);
+void initPredicateEncoding(FunctionEncoding *encoding, Boolean *predicate);
void deleteFunctionEncoding(FunctionEncoding *This);
#endif
+++ /dev/null
-#include "naiveelementencoder.h"
-#include "elementencoding.h"
-#include "element.h"
-#include "set.h"
-#include "common.h"
-#include "structs.h"
-#include <strings.h>
-
-void baseBinaryIndexElementAssign(ElementEncoding *This) {
- Element * element=This->element;
- ASSERT(element->type == ELEMSET);
- Set * set= ((ElementSet*)element)->set;
- ASSERT(set->isRange==false);
- uint size=getSizeVectorInt(set->members);
- uint encSize=NEXTPOW2(size);
- allocEncodingArrayElement(This, encSize);
- allocInUseArrayElement(This, encSize);
-
- for(uint i=0;i<size;i++) {
- This->encodingArray[i]=getVectorInt(set->members, i);
- setInUseElement(This, i);
- }
-}
-
+++ /dev/null
-#ifndef NAIVEELEMENTENCODER_H
-#define NAIVEELEMENTENCODER_H
-#include "classlist.h"
-void baseBinaryIndexElementAssign(ElementEncoding *This);
-#endif
--- /dev/null
+#include "naiveencoder.h"
+#include "elementencoding.h"
+#include "element.h"
+#include "functionencoding.h"
+#include "function.h"
+#include "set.h"
+#include "common.h"
+#include "structs.h"
+#include <strings.h>
+
+void baseBinaryIndexElementAssign(ElementEncoding *This) {
+ Element * element=This->element;
+ ASSERT(element->type == ELEMSET);
+ Set * set= ((ElementSet*)element)->set;
+ ASSERT(set->isRange==false);
+ uint size=getSizeVectorInt(set->members);
+ uint encSize=NEXTPOW2(size);
+ allocEncodingArrayElement(This, encSize);
+ allocInUseArrayElement(This, encSize);
+
+ for(uint i=0;i<size;i++) {
+ This->encodingArray[i]=getVectorInt(set->members, i);
+ setInUseElement(This, i);
+ }
+}
--- /dev/null
+#ifndef NAIVEELEMENTENCODER_H
+#define NAIVEELEMENTENCODER_H
+#include "classlist.h"
+void baseBinaryIndexElementAssign(ElementEncoding *This);
+#endif