From 209bd43f10b799272e25e1544be9812b87bf467a Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Tue, 30 Apr 2013 17:45:33 +0200 Subject: [PATCH] add h_hashtable_update and h_hashset_put_all --- src/datastructures.c | 10 ++++++++++ src/internal.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/datastructures.c b/src/datastructures.c index 5993e457..0077d6b5 100644 --- a/src/datastructures.c +++ b/src/datastructures.c @@ -166,6 +166,16 @@ void h_hashtable_put(HHashTable* ht, const void* key, void* value) { 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) { HHashValue hashval = ht->hashFunc(key); #ifdef CONSISTENCY_CHECK diff --git a/src/internal.h b/src/internal.h index d4ba829b..2ba6b225 100644 --- a/src/internal.h +++ b/src/internal.h @@ -250,6 +250,7 @@ void h_slist_free(HSlist *slist); HHashTable* h_hashtable_new(HArena *arena, HEqualFunc equalFunc, HHashFunc hashFunc); void* h_hashtable_get(HHashTable* ht, const void* key); 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); void h_hashtable_del(HHashTable* ht, const void* key); void h_hashtable_free(HHashTable* ht); @@ -258,6 +259,7 @@ static inline bool h_hashtable_empty(HHashTable* ht) { return (ht->used == 0); } typedef HHashTable HHashSet; #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_all(a,b) h_hashtable_update(a, b) #define h_hashset_present(ht,el) h_hashtable_present(ht,el) #define h_hashset_empty(ht) h_hashtable_empty(ht) #define h_hashset_del(ht,el) h_hashtable_del(ht,el) -- GitLab