Mesa (master): hash_table: Add an iterator for doing things like cleanup of the HT.

Eric Anholt anholt at kemper.freedesktop.org
Tue Apr 26 12:26:04 PDT 2011


Module: Mesa
Branch: master
Commit: b061b5ffb055c64ffc45e506bad877f47942ba01
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b061b5ffb055c64ffc45e506bad877f47942ba01

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Mar 23 12:05:56 2011 -0700

hash_table: Add an iterator for doing things like cleanup of the HT.

Without this, consumers often have to keep linked lists of the
entries, at additional malloc cost.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/program/hash_table.c |   19 +++++++++++++++++++
 src/mesa/program/hash_table.h |    7 +++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/hash_table.c b/src/mesa/program/hash_table.c
index f7ef366..877a9e2 100644
--- a/src/mesa/program/hash_table.c
+++ b/src/mesa/program/hash_table.c
@@ -160,6 +160,25 @@ hash_table_remove(struct hash_table *ht, const void *key)
     }
 }
 
+void
+hash_table_call_foreach(struct hash_table *ht,
+			void (*callback)(const void *key,
+					 void *data,
+					 void *closure),
+			void *closure)
+{
+   int bucket;
+
+   for (bucket = 0; bucket < ht->num_buckets; bucket++) {
+      struct node *node, *temp;
+      foreach_s(node, temp, &ht->buckets[bucket]) {
+	 struct hash_node *hn = (struct hash_node *) node;
+
+	 callback(hn->key, hn->data, closure);
+      }
+   }
+}
+
 unsigned
 hash_table_string_hash(const void *key)
 {
diff --git a/src/mesa/program/hash_table.h b/src/mesa/program/hash_table.h
index f1c4fdc..e715bb1 100644
--- a/src/mesa/program/hash_table.h
+++ b/src/mesa/program/hash_table.h
@@ -144,6 +144,13 @@ hash_table_pointer_hash(const void *key);
 int
 hash_table_pointer_compare(const void *key1, const void *key2);
 
+void
+hash_table_call_foreach(struct hash_table *ht,
+			void (*callback)(const void *key,
+					 void *data,
+					 void *closure),
+			void *closure);
+
 #ifdef __cplusplus
 }
 #endif



More information about the mesa-commit mailing list