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:
@@ -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.
|
||||
*
|
||||
|
@@ -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,
|
||||
};
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user