}
HashTableDef(Void, void *, void *, Ptr_hash_function, Ptr_equals);
-HashTableDef(ElemToEncod, Element *, ElementEncoding *, Ptr_hash_function, Ptr_equals);
-HashTableDef(VoidToFuncEncod, void *, FunctionEncoding *, Ptr_hash_function, Ptr_equals);
-
HashSetDef(Void, void *, Ptr_hash_function, Ptr_equals);
void allocInUseArrayElement(ElementEncoding *This, uint size) {
This->inUseArray=ourcalloc(1, size >> 6);
}
+
+void setElementEncodingType(ElementEncoding* This, ElementEncodingType type){
+ This->type = type;
+}
};
void initElementEncoding(ElementEncoding *This, Element *element);
+void setElementEncodingType(ElementEncoding* This, ElementEncodingType type);
void deleteElementEncoding(ElementEncoding *This);
void baseBinaryIndexElementAssign(ElementEncoding *This);
void allocEncodingArrayElement(ElementEncoding *This, uint size);
+++ /dev/null
-#include "encodings.h"
-#include "elementencoding.h"
-#include "functionencoding.h"
-#include "element.h"
-#include "common.h"
-#include "boolean.h"
-#include "naiveencoder.h"
-
-Encodings* allocEncodings(){
- Encodings* This = (Encodings*) ourmalloc(sizeof(Encodings));
- allocInlineDefVectorElementEncoding(GETVECTORELEMENTENCODING(This));
- allocInlineDefVectorFunctionEncoding(GETVECTORFUNCTIONENCODING(This));
- This->elemToEncode= allocHashTableElemToEncod(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
- This->voidToFuncEncode= allocHashTableVoidToFuncEncod(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
- return This;
-}
-
-void deleteEncodings(Encodings* This){
- deleteVectorArrayFunctionEncoding(GETVECTORFUNCTIONENCODING(This));
- deleteVectorArrayElementEncoding(GETVECTORELEMENTENCODING(This));
- deleteHashTableElemToEncod(This->elemToEncode);
- deleteHashTableVoidToFuncEncod(This->voidToFuncEncode);
- ourfree(This);
-}
-
-void assignEncoding(CSolver* csolver, Encodings* This){
- uint size = getSizeVectorElement(csolver->allElements);
- for(uint i=0; i<size; i++){
- Element* element = getVectorElement(csolver->allElements, i);
- if(GETELEMENTTYPE(element)==ELEMSET){
- ElementEncoding* eencoding = allocElementEncoding( BINARYINDEX, element);
- baseBinaryIndexElementAssign(eencoding);
- pushVectorElementEncoding(GETVECTORELEMENTENCODING(This) , eencoding);
- putElemToEncod(This->elemToEncode, element, eencoding);
- }else if (GETELEMENTTYPE(element)==ELEMFUNCRETURN){
- FunctionEncoding* fencoding = allocFunctionEncoding( ENUMERATEIMPLICATIONS, element);
- pushVectorFunctionEncoding(GETVECTORFUNCTIONENCODING(This) , fencoding);
- putVoidToFuncEncod(This->voidToFuncEncode,element, fencoding);
- }else
- ASSERT(0);
- }
-
- size = getSizeVectorBoolean(csolver->allBooleans);
- for(uint i=0; i<size; i++){
- Boolean* predicate = getVectorBoolean(csolver->allBooleans, i);
- if(GETBOOLEANTYPE(predicate)==PREDICATEOP){
- FunctionEncoding* fencoding = allocPredicateEncoding(ENUMERATEIMPLICATIONS, predicate);
- pushVectorFunctionEncoding(GETVECTORFUNCTIONENCODING(This), fencoding);
- putVoidToFuncEncod(This->voidToFuncEncode, predicate,fencoding);
- }else
- ASSERT(0);
- }
-}
-
-void encodeFunctionsElements(Encodings* This){
- //call encoding for each element/predicate
-}
\ No newline at end of file
+++ /dev/null
-
-#ifndef NAIVEENCODINGASSIGNMENT_H
-#define NAIVEENCODINGASSIGNMENT_H
-#include "classlist.h"
-#include "structs.h"
-#include "csolver.h"
-#include "mymemory.h"
-
-
-#define GETVECTORFUNCTIONENCODING(o) (&((Encodings*)o)->funcEncoding)
-#define GETVECTORELEMENTENCODING(o) (&((Encodings*)o)->elemEncoding)
-
-struct Encodings{
- HashTableVoidToFuncEncod* voidToFuncEncode;
- HashTableElemToEncod* elemToEncode;
- VectorFunctionEncoding funcEncoding;
- VectorElementEncoding elemEncoding;
-};
-
-Encodings* allocEncodings();
-
-//For now, This function just simply goes through elements/functions and
-//assigns a predefined Encoding to each of them
-void assignEncoding(CSolver* csolver, Encodings* This);
-void encodeFunctionsElements(Encodings* This);
-void deleteEncodings(Encodings* This);
-
-#endif /* NAIVEENCODINGASSIGNMENT_H */
-
}
void deleteFunctionEncoding(FunctionEncoding *This) {
+ ourfree(This);
+}
+
+void setFunctionEncodingType(FunctionEncoding* encoding, FunctionEncodingType type){
+ encoding->type=type;
}
void initFunctionEncoding(FunctionEncoding *encoding, Element *function);
void initPredicateEncoding(FunctionEncoding *encoding, Boolean *predicate);
+void setFunctionEncodingType(FunctionEncoding* encoding, FunctionEncodingType type);
void deleteFunctionEncoding(FunctionEncoding *This);
#endif
#include "set.h"
#include "common.h"
#include "structs.h"
+#include "csolver.h"
+#include "boolean.h"
+#include "table.h"
#include <strings.h>
+void assignEncoding(CSolver* csolver){
+ uint size = getSizeVectorElement(csolver->allElements);
+ for(uint i=0; i<size; i++){
+ Element* element = getVectorElement(csolver->allElements, i);
+ switch(GETELEMENTTYPE(element)){
+ case ELEMSET:
+ setElementEncodingType(&((ElementSet*)element)->encoding, BINARYINDEX);
+ baseBinaryIndexElementAssign(&((ElementSet*)element)->encoding);
+ break;
+ case ELEMFUNCRETURN:
+ setFunctionEncodingType(&((ElementFunction*)element)->functionencoding, ENUMERATEIMPLICATIONS);
+ break;
+ default:
+ ASSERT(0);
+ }
+ }
+
+ size = getSizeVectorBoolean(csolver->allBooleans);
+ for(uint i=0; i<size; i++){
+ Boolean* predicate = getVectorBoolean(csolver->allBooleans, i);
+ switch(GETBOOLEANTYPE(predicate)){
+ case PREDICATEOP:
+ setFunctionEncodingType(&((BooleanPredicate*)predicate)->encoding, ENUMERATEIMPLICATIONS);
+ break;
+ default:
+ continue;
+ }
+ }
+}
+
void baseBinaryIndexElementAssign(ElementEncoding *This) {
Element * element=This->element;
ASSERT(element->type == ELEMSET);
}
-void naiveEncodeFunctionPredicate(Encodings* encodings, FunctionEncoding *This){
+void encode(CSolver* csolver){
+ uint size = getSizeVectorElement(csolver->allElements);
+ for(uint i=0; i<size; i++){
+ Element* element = getVectorElement(csolver->allElements, i);
+ switch(GETELEMENTTYPE(element)){
+ case ELEMFUNCRETURN:
+ naiveEncodeFunctionPredicate(&((ElementFunction*)element)->functionencoding);
+ break;
+ default:
+ continue;
+ }
+ }
+
+ size = getSizeVectorBoolean(csolver->allBooleans);
+ for(uint i=0; i<size; i++){
+ Boolean* predicate = getVectorBoolean(csolver->allBooleans, i);
+ switch(GETBOOLEANTYPE(predicate)){
+ case PREDICATEOP:
+ naiveEncodeFunctionPredicate(&((BooleanPredicate*)predicate)->encoding);
+ break;
+ default:
+ continue;
+ }
+ }
+}
+
+void naiveEncodeFunctionPredicate(FunctionEncoding *This){
if(This->isFunction) {
ASSERT(GETELEMENTTYPE(This->op.function)==ELEMFUNCRETURN);
- if(This->type==CIRCUIT){
- naiveEncodeCircuitFunction(encodings, This);
- } else if( This->type == ENUMERATEIMPLICATIONS){
- naiveEncodeEnumeratedFunction(encodings, This);
- } else
- ASSERT(0);
-
+ switch(This->type){
+ case ENUMERATEIMPLICATIONS:
+ naiveEncodeEnumeratedFunction(This);
+ break;
+ case CIRCUIT:
+ naiveEncodeCircuitFunction(This);
+ break;
+ default:
+ ASSERT(0);
+ }
}else {
ASSERT(GETBOOLEANTYPE(This->op.predicate) == PREDICATEOP);
BooleanPredicate* predicate = (BooleanPredicate*)This->op.predicate;
}
-void naiveEncodeCircuitFunction(Encodings* encodings, FunctionEncoding* This){
+void naiveEncodeCircuitFunction(FunctionEncoding* This){
}
-void naiveEncodeEnumeratedFunction(Encodings* encodings, FunctionEncoding* This){
+void naiveEncodeEnumeratedFunction(FunctionEncoding* This){
ElementFunction* ef =(ElementFunction*)This->op.function;
Function * function = ef->function;
- if(GETFUNCTIONTYPE(function)==TABLEFUNC){
- naiveEncodeEnumTableFunc(encodings, ef);
- }else if (GETFUNCTIONTYPE(function)== OPERATORFUNC){
- naiveEncodeEnumOperatingFunc(encodings, ef);
- }else
- ASSERT(0);
+ switch(GETFUNCTIONTYPE(function)){
+ case TABLEFUNC:
+ naiveEncodeEnumTableFunc(ef);
+ break;
+ case OPERATORFUNC:
+ naiveEncodeEnumOperatingFunc(ef);
+ break;
+ default:
+ ASSERT(0);
+ }
}
-void naiveEncodeEnumTableFunc(Encodings* encodings, ElementFunction* This){
+void naiveEncodeEnumTableFunc(ElementFunction* This){
ASSERT(GETFUNCTIONTYPE(This->function)==TABLEFUNC);
ArrayElement* elements= &This->inputs;
Table* table = ((FunctionTable*) (This->function))->table;
}
-void naiveEncodeEnumOperatingFunc(Encodings* encodings, ElementFunction* This){
+void naiveEncodeEnumOperatingFunc(ElementFunction* This){
}
\ No newline at end of file
#ifndef NAIVEELEMENTENCODER_H
#define NAIVEELEMENTENCODER_H
#include "classlist.h"
+
+//For now, This function just simply goes through elements/functions and
+//assigns a predefined Encoding to each of them
+void assignEncoding(CSolver* csolver);
+void encode(CSolver* csolver);
void baseBinaryIndexElementAssign(ElementEncoding *This);
-void naiveEncodeFunctionPredicate(Encodings* encodings, FunctionEncoding *This);
-void naiveEncodeCircuitFunction(Encodings* encodings,FunctionEncoding* This);
-void naiveEncodeEnumeratedFunction(Encodings* encodings, FunctionEncoding* This);
-void naiveEncodeEnumTableFunc(Encodings* encodings, ElementFunction* This);
-void naiveEncodeEnumOperatingFunc(Encodings* encodings, ElementFunction* This);
+void naiveEncodeFunctionPredicate( FunctionEncoding *This);
+void naiveEncodeCircuitFunction(FunctionEncoding* This);
+void naiveEncodeEnumeratedFunction(FunctionEncoding* This);
+void naiveEncodeEnumTableFunc(ElementFunction* This);
+void naiveEncodeEnumOperatingFunc(ElementFunction* This);
#endif
struct TableEntry;
typedef struct TableEntry TableEntry;
-struct Encodings;
-typedef struct Encodings Encodings;
-
typedef unsigned int uint;
typedef uint64_t VarType;
#endif