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