From ee23e8b17c77fa94320168427fb8a10a84b50e94 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Tue, 11 Sep 2018 16:37:33 -0700 Subject: [PATCH] util: Helper to create sets and hashes with pointer keys These combinations are common enough and deserve a shortcut. Reviewed-by: Jason Ekstrand Acked-by: Eric Engestrom --- src/util/hash_table.c | 10 ++++++++++ src/util/hash_table.h | 3 +++ src/util/set.c | 11 +++++++++++ src/util/set.h | 3 +++ 4 files changed, 27 insertions(+) diff --git a/src/util/hash_table.c b/src/util/hash_table.c index 4f510612a8f..57a5f247edc 100644 --- a/src/util/hash_table.c +++ b/src/util/hash_table.c @@ -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. * diff --git a/src/util/hash_table.h b/src/util/hash_table.h index 40acda1fd1e..e451bd7c21b 100644 --- a/src/util/hash_table.h +++ b/src/util/hash_table.h @@ -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, }; diff --git a/src/util/set.c b/src/util/set.c index fe5b10f0fee..18f1262e3f5 100644 --- a/src/util/set.c +++ b/src/util/set.c @@ -36,6 +36,7 @@ #include #include +#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); +} diff --git a/src/util/set.h b/src/util/set.h index 54719e4c8ab..307a2e46765 100644 --- a/src/util/set.h +++ b/src/util/set.h @@ -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 -- 2.30.2