From 10a7682413785a0b3667ab077971cd132f43281b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 29 Sep 2020 17:29:09 -0400 Subject: [PATCH] util: add _mesa_set_create_u32_keys where keys are not pointers the only limitation is that key=0 is not allowed Reviewed-by: Timothy Arceri Part-of: --- src/util/set.c | 20 ++++++++++++++++++++ src/util/set.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/util/set.c b/src/util/set.c index a9012b4e6d4..006d5d2a502 100644 --- a/src/util/set.c +++ b/src/util/set.c @@ -148,6 +148,26 @@ _mesa_set_create(void *mem_ctx, return ht; } +static uint32_t +key_u32_hash(const void *key) +{ + uint32_t u = (uint32_t)(uintptr_t)key; + return _mesa_hash_uint(&u); +} + +static bool +key_u32_equals(const void *a, const void *b) +{ + return (uint32_t)(uintptr_t)a == (uint32_t)(uintptr_t)b; +} + +/* key == 0 and key == deleted_key are not allowed */ +struct set * +_mesa_set_create_u32_keys(void *mem_ctx) +{ + return _mesa_set_create(NULL, key_u32_hash, key_u32_equals); +} + struct set * _mesa_set_clone(struct set *set, void *dst_mem_ctx) { diff --git a/src/util/set.h b/src/util/set.h index 2e0a2d66f85..1836864213f 100644 --- a/src/util/set.h +++ b/src/util/set.h @@ -60,6 +60,9 @@ _mesa_set_create(void *mem_ctx, uint32_t (*key_hash_function)(const void *key), bool (*key_equals_function)(const void *a, const void *b)); +struct set * +_mesa_set_create_u32_keys(void *mem_ctx); + struct set * _mesa_set_clone(struct set *set, void *dst_mem_ctx);