Skip to content
Snippets Groups Projects
Commit 209bd43f authored by Sven M. Hallberg's avatar Sven M. Hallberg
Browse files

add h_hashtable_update and h_hashset_put_all

parent 109d60fc
No related branches found
No related tags found
No related merge requests found
...@@ -166,6 +166,16 @@ void h_hashtable_put(HHashTable* ht, const void* key, void* value) { ...@@ -166,6 +166,16 @@ void h_hashtable_put(HHashTable* ht, const void* key, void* value) {
hte->hashval = hashval; hte->hashval = hashval;
} }
void h_hashtable_update(HHashTable *dst, const HHashTable *src) {
size_t i;
HHashTableEntry *hte;
for(i=0; i < src->capacity; i++) {
for(hte = &src->contents[i]; hte; hte = hte->next) {
h_hashtable_put(dst, hte->key, hte->value);
}
}
}
int h_hashtable_present(HHashTable* ht, const void* key) { int h_hashtable_present(HHashTable* ht, const void* key) {
HHashValue hashval = ht->hashFunc(key); HHashValue hashval = ht->hashFunc(key);
#ifdef CONSISTENCY_CHECK #ifdef CONSISTENCY_CHECK
......
...@@ -250,6 +250,7 @@ void h_slist_free(HSlist *slist); ...@@ -250,6 +250,7 @@ void h_slist_free(HSlist *slist);
HHashTable* h_hashtable_new(HArena *arena, HEqualFunc equalFunc, HHashFunc hashFunc); HHashTable* h_hashtable_new(HArena *arena, HEqualFunc equalFunc, HHashFunc hashFunc);
void* h_hashtable_get(HHashTable* ht, const void* key); void* h_hashtable_get(HHashTable* ht, const void* key);
void h_hashtable_put(HHashTable* ht, const void* key, void* value); void h_hashtable_put(HHashTable* ht, const void* key, void* value);
void h_hashtable_update(HHashTable* dst, const HHashTable *src);
int h_hashtable_present(HHashTable* ht, const void* key); int h_hashtable_present(HHashTable* ht, const void* key);
void h_hashtable_del(HHashTable* ht, const void* key); void h_hashtable_del(HHashTable* ht, const void* key);
void h_hashtable_free(HHashTable* ht); void h_hashtable_free(HHashTable* ht);
...@@ -258,6 +259,7 @@ static inline bool h_hashtable_empty(HHashTable* ht) { return (ht->used == 0); } ...@@ -258,6 +259,7 @@ static inline bool h_hashtable_empty(HHashTable* ht) { return (ht->used == 0); }
typedef HHashTable HHashSet; typedef HHashTable HHashSet;
#define h_hashset_new(a,eq,hash) h_hashtable_new(a,eq,hash) #define h_hashset_new(a,eq,hash) h_hashtable_new(a,eq,hash)
#define h_hashset_put(ht,el) h_hashtable_put(ht, el, NULL) #define h_hashset_put(ht,el) h_hashtable_put(ht, el, NULL)
#define h_hashset_put_all(a,b) h_hashtable_update(a, b)
#define h_hashset_present(ht,el) h_hashtable_present(ht,el) #define h_hashset_present(ht,el) h_hashtable_present(ht,el)
#define h_hashset_empty(ht) h_hashtable_empty(ht) #define h_hashset_empty(ht) h_hashtable_empty(ht)
#define h_hashset_del(ht,el) h_hashtable_del(ht,el) #define h_hashset_del(ht,el) h_hashtable_del(ht,el)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment