#include "mymemory.h"
#include "common.h"
+#define HT_DEFAULT_FACTOR 0.75
+#define HT_INITIAL_CAPACITY 16
+
/**
* @brief A simple, custom hash table
*
VectorDef(Order, Order *, 4);
VectorDef(Function, Function *, 4);
VectorDef(ASTNode, ASTNode *, 4);
+VectorDef(FunctionEncoding, FunctionEncoding *, 4);
+VectorDef(ElementEncoding, ElementEncoding *, 4);
inline unsigned int Ptr_hash_function(void * hash) {
return (unsigned int)((uint64_t)hash >> 4);
}
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);
+
#endif
--- /dev/null
+#include "encodings.h"
+#include "elementencoding.h"
+#include "functionencoding.h"
+#include "element.h"
+#include "common.h"
+#include "boolean.h"
+#include "naiveelementencoder.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 */
+
FunctionEncoding * allocFunctionEncoding(FunctionEncodingType type, Element *function);
FunctionEncoding * allocPredicateEncoding(FunctionEncodingType type, Boolean *predicate);
void deleteFunctionEncoding(FunctionEncoding *This);
+
#endif
--- /dev/null
+
+#include "naivefunctionencoder.h"
+#include "functionencoding.h"
+#include "common.h"
+#include "element.h"
+#include "boolean.h"
+#include "function.h"
+#include "table.h"
+#include "tableentry.h"
+
+void naiveEncodeFunctionPredicate(Encodings* encodings, 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);
+
+ }else {
+ ASSERT(GETBOOLEANTYPE(This->op.predicate) == PREDICATEOP);
+ BooleanPredicate* predicate = (BooleanPredicate*)This->op.predicate;
+ //FIXME
+
+ }
+}
+
+
+void naiveEncodeCircuitFunction(Encodings* encodings, FunctionEncoding* This){
+
+}
+
+void naiveEncodeEnumeratedFunction(Encodings* encodings, 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);
+}
+
+void naiveEncodeEnumTableFunc(Encodings* encodings, ElementFunction* This){
+ ASSERT(GETFUNCTIONTYPE(This->function)==TABLEFUNC);
+ VectorElement* elements= This->Elements;
+ Table* table = ((FunctionTable*) This->function)->table;
+ uint size = getSizeVectorTableEntry(table->entries);
+ for(uint i=0; i<size; i++){
+ TableEntry* entry = getVectorTableEntry(table->entries, i);
+ //FIXME: generate Constraints
+ }
+
+}
+
+void naiveEncodeEnumOperatingFunc(Encodings* encodings, ElementFunction* This){
+
+}
\ No newline at end of file
--- /dev/null
+
+
+#ifndef NAIVEFUNCTIONENCODER_H
+#define NAIVEFUNCTIONENCODER_H
+#include "encodings.h"
+#include "functionencoding.h"
+
+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);
+#endif /* NAIVEFUNCTIONENCODER_H */
+
struct TableEntry;
typedef struct TableEntry TableEntry;
+struct Encodings;
+typedef struct Encodings Encodings;
+
typedef unsigned int uint;
typedef uint64_t VarType;
#endif