From 7b3e6b2abd896a838e7a35765e2a542814905b49 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 30 Jun 2017 15:39:22 -0700 Subject: [PATCH] Get rid of annoying errors and fix crazy hash function --- src/AST/predicate.c | 2 +- src/Backend/satencoder.c | 4 ++-- src/Collections/hashset.h | 4 ++-- src/Collections/hashtable.h | 2 +- src/Collections/structs.c | 17 +++++++++++++++++ src/Collections/structs.h | 21 +++------------------ 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/AST/predicate.c b/src/AST/predicate.c index 97bbd18..ebb3c14 100644 --- a/src/AST/predicate.c +++ b/src/AST/predicate.c @@ -13,7 +13,7 @@ Predicate* allocPredicateTable(Table* table, UndefinedBehavior undefBehavior){ GETPREDICATETYPE(predicate) = TABLEPRED; predicate->table=table; predicate->undefinedbehavior=undefBehavior; - return predicate; + return &predicate->base; } void deletePredicate(Predicate* predicate){ diff --git a/src/Backend/satencoder.c b/src/Backend/satencoder.c index 9fd5519..3975121 100644 --- a/src/Backend/satencoder.c +++ b/src/Backend/satencoder.c @@ -187,9 +187,9 @@ Constraint * encodeTotalOrderSATEncoder(SATEncoder *This, BooleanOrder * boolOrd uint size= getSizeVectorBoolean(orderConstrs); for(uint i=0; isecond==boolOrder->first){ newBool = (BooleanOrder*)allocBooleanOrder(tmp->order,tmp->first,boolOrder->second); first = encodeTotalOrderSATEncoder(This, tmp); diff --git a/src/Collections/hashset.h b/src/Collections/hashset.h index a0f0c9e..0fe1386 100644 --- a/src/Collections/hashset.h +++ b/src/Collections/hashset.h @@ -11,7 +11,7 @@ #define HASH_SET_H #include "hashtable.h" -#define HashSetDef(Name, _Key, hash_function, equals) \ +#define HashSetDef(Name, _Key) \ struct LinkNode ## Name { \ _Key key; \ struct LinkNode ## Name *prev; \ @@ -26,7 +26,7 @@ HashSet ## Name * set; \ }; \ typedef struct HSIterator ## Name HSIterator ## Name; \ - HashTableDef(Name ## Set, _Key, LinkNode ## Name *, hash_function, equals); \ + HashTableDef(Name ## Set, _Key, LinkNode ## Name *); \ HSIterator ## Name * allocHSIterator ## Name(LinkNode ## Name *_curr, HashSet ## Name * _set); \ void deleteIter ## Name(HSIterator ## Name *hsit); \ bool hasNext ## Name(HSIterator ## Name *hsit); \ diff --git a/src/Collections/hashtable.h b/src/Collections/hashtable.h index f4610d0..b7c78d9 100644 --- a/src/Collections/hashtable.h +++ b/src/Collections/hashtable.h @@ -34,7 +34,7 @@ * @tparam _Key Type name for the key * @tparam _Val Type name for the values to be stored */ -#define HashTableDef(Name, _Key, _Val, hash_function, equals)\ +#define HashTableDef(Name, _Key, _Val)\ struct hashlistnode ## Name { \ _Key key; \ _Val val; \ diff --git a/src/Collections/structs.c b/src/Collections/structs.c index 48886ac..6fd7cea 100644 --- a/src/Collections/structs.c +++ b/src/Collections/structs.c @@ -1,5 +1,6 @@ #include "structs.h" #include "mymemory.h" +#include "order.h" VectorImpl(Table, Table *, 4); VectorImpl(Set, Set *, 4); @@ -13,4 +14,20 @@ VectorImpl(TableEntry, TableEntry *, 4); VectorImpl(ASTNode, ASTNode *, 4); VectorImpl(Int, uint64_t, 4); +inline unsigned int Ptr_hash_function(void * hash) { + return (unsigned int)((uint64_t)hash >> 4); +} + +inline bool Ptr_equals(void * key1, void * key2) { + return key1 == key2; +} + +inline unsigned int BooleanOrder_hash_Function(BooleanOrder* This){ + return This->first ^ This->second; +} + +inline unsigned int BooleanOrder_equals(BooleanOrder* key1, BooleanOrder* key2){ + return key1->first== key2->first && key1->second == key2->second; +} + HashTableImpl(BoolConst, BooleanOrder *, Constraint *, BooleanOrder_hash_Function, BooleanOrder_equals); diff --git a/src/Collections/structs.h b/src/Collections/structs.h index 1ae5f8c..86db3ed 100644 --- a/src/Collections/structs.h +++ b/src/Collections/structs.h @@ -24,25 +24,10 @@ VectorDef(ASTNode, ASTNode *, 4); VectorDef(Int, uint64_t, 4); -inline unsigned int Ptr_hash_function(void * hash) { - return (unsigned int)((uint64_t)hash >> 4); -} -inline bool Ptr_equals(void * key1, void * key2) { - return key1 == key2; -} +HashTableDef(Void, void *, void *); +HashTableDef(BoolConst, BooleanOrder *, Constraint *); -inline unsigned int BooleanOrder_hash_Function(BooleanOrder* This){ - return ((This->first+This->second)(This->first+This->second+1))/2 + This->second; -} - -inline unsigned int BooleanOrder_equals(BooleanOrder* key1, BooleanOrder* key2){ - return key1->first== key2->first && key1->second == key2->second; -} - -HashTableDef(Void, void *, void *, Ptr_hash_function, Ptr_equals); -HashTableDef(BoolConst, BooleanOrder *, Constraint *, BooleanOrder_hash_Function, BooleanOrder_equals); - -HashSetDef(Void, void *, Ptr_hash_function, Ptr_equals); +HashSetDef(Void, void *); #endif -- 2.34.1