[Mesa-dev] [PATCH 05/15] mesa: Refactor hash_table_{find, remove} to share some code

Ian Romanick idr at freedesktop.org
Thu Sep 29 10:51:55 PDT 2011


From: Ian Romanick <ian.d.romanick at intel.com>

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/mesa/program/hash_table.c |   32 ++++++++++++++++----------------
 1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/mesa/program/hash_table.c b/src/mesa/program/hash_table.c
index 877a9e2..2b09462 100644
--- a/src/mesa/program/hash_table.c
+++ b/src/mesa/program/hash_table.c
@@ -108,8 +108,8 @@ hash_table_clear(struct hash_table *ht)
 }
 
 
-void *
-hash_table_find(struct hash_table *ht, const void *key)
+static struct hash_node *
+get_node(struct hash_table *ht, const void *key)
 {
     const unsigned hash_value = (*ht->hash)(key);
     const unsigned bucket = hash_value % ht->num_buckets;
@@ -119,13 +119,20 @@ hash_table_find(struct hash_table *ht, const void *key)
        struct hash_node *hn = (struct hash_node *) node;
 
        if ((*ht->compare)(hn->key, key) == 0) {
-	  return hn->data;
+	  return hn;
        }
     }
 
     return NULL;
 }
 
+void *
+hash_table_find(struct hash_table *ht, const void *key)
+{
+   struct hash_node *hn = get_node(ht, key);
+
+   return (hn == NULL) ? NULL : hn->data;
+}
 
 void
 hash_table_insert(struct hash_table *ht, void *data, const void *key)
@@ -145,19 +152,12 @@ hash_table_insert(struct hash_table *ht, void *data, const void *key)
 void
 hash_table_remove(struct hash_table *ht, const void *key)
 {
-    const unsigned hash_value = (*ht->hash)(key);
-    const unsigned bucket = hash_value % ht->num_buckets;
-    struct node *node;
-
-    foreach(node, & ht->buckets[bucket]) {
-       struct hash_node *hn = (struct hash_node *) node;
-
-       if ((*ht->compare)(hn->key, key) == 0) {
-	  remove_from_list(node);
-	  free(node);
-	  return;
-       }
-    }
+   struct node *node = (struct node *) get_node(ht, key);
+   if (node != NULL) {
+      remove_from_list(node);
+      free(node);
+      return;
+   }
 }
 
 void
-- 
1.7.6



More information about the mesa-dev mailing list