util: Helper to create sets and hashes with pointer keys

These combinations are common enough and deserve a shortcut.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Acked-by: Eric Engestrom <eric@engestrom.ch>
This commit is contained in:
Caio Marcelo de Oliveira Filho
2018-09-11 16:37:33 -07:00
parent 929df7afaf
commit ee23e8b17c
4 changed files with 27 additions and 0 deletions

View 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.
*

View 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,
};

View 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);
}

View 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