util: Helper to create sets and hashes with pointer keys
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Tue, 11 Sep 2018 23:37:33 +0000 (16:37 -0700)
committerCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Mon, 14 Jan 2019 18:49:21 +0000 (10:49 -0800)
These combinations are common enough and deserve a shortcut.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Acked-by: Eric Engestrom <eric@engestrom.ch>
src/util/hash_table.c
src/util/hash_table.h
src/util/set.c
src/util/set.h

index 4f510612a8f4021329169ae71b24d10ca5bf15a8..57a5f247edcec89be20374b4dfbed320c9f36390 100644 (file)
@@ -547,6 +547,16 @@ _mesa_key_pointer_equal(const void *a, const void *b)
    return a == b;
 }
 
+/**
+ * Helper to create a hash table with pointer keys.
+ */
+struct hash_table *
+_mesa_pointer_hash_table_create(void *mem_ctx)
+{
+   return _mesa_hash_table_create(mem_ctx, _mesa_hash_pointer,
+                                  _mesa_key_pointer_equal);
+}
+
 /**
  * Hash table wrapper which supports 64-bit keys.
  *
index 40acda1fd1ea72047b010df000af2cca2077dae9..e451bd7c21beb297bcec9582d5ce41ea87ba61f3 100644 (file)
@@ -121,6 +121,9 @@ static inline uint32_t _mesa_hash_pointer(const void *pointer)
    return (uint32_t) ((num >> 2) ^ (num >> 6) ^ (num >> 10) ^ (num >> 14));
 }
 
+struct hash_table *
+_mesa_pointer_hash_table_create(void *mem_ctx);
+
 enum {
    _mesa_fnv32_1a_offset_bias = 2166136261u,
 };
index fe5b10f0fee4c35b28933ec0eef60b9531d4e528..18f1262e3f52bb199f3748f683fb97e6be628b44 100644 (file)
@@ -36,6 +36,7 @@
 #include <assert.h>
 #include <string.h>
 
+#include "hash_table.h"
 #include "macros.h"
 #include "ralloc.h"
 #include "set.h"
@@ -437,3 +438,13 @@ _mesa_set_random_entry(struct set *ht,
 
    return NULL;
 }
+
+/**
+ * Helper to create a set with pointer keys.
+ */
+struct set *
+_mesa_pointer_set_create(void *mem_ctx)
+{
+   return _mesa_set_create(mem_ctx, _mesa_hash_pointer,
+                           _mesa_key_pointer_equal);
+}
index 54719e4c8ab8feb7a8fb7218d18ee1f9e5dbe342..307a2e46765a7ba92bbd29ac683881ca58b5aca3 100644 (file)
@@ -91,6 +91,9 @@ struct set_entry *
 _mesa_set_random_entry(struct set *set,
                        int (*predicate)(struct set_entry *entry));
 
+struct set *
+_mesa_pointer_set_create(void *mem_ctx);
+
 /**
  * This foreach function is safe against deletion, but not against
  * insertion (which may rehash the set, making entry a dangling