diff options
Diffstat (limited to 'mesalib/src/util/hash_table.h')
-rw-r--r-- | mesalib/src/util/hash_table.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/mesalib/src/util/hash_table.h b/mesalib/src/util/hash_table.h index 5561e1584..eb9dbc333 100644 --- a/mesalib/src/util/hash_table.h +++ b/mesalib/src/util/hash_table.h @@ -70,8 +70,8 @@ void _mesa_hash_table_set_deleted_key(struct hash_table *ht, struct hash_entry * _mesa_hash_table_insert(struct hash_table *ht, const void *key, void *data); struct hash_entry * -_mesa_hash_table_insert_with_hash(struct hash_table *ht, uint32_t hash, - const void *key, void *data); +_mesa_hash_table_insert_pre_hashed(struct hash_table *ht, uint32_t hash, + const void *key, void *data); struct hash_entry * _mesa_hash_table_search(struct hash_table *ht, const void *key); struct hash_entry * @@ -101,6 +101,25 @@ static inline uint32_t _mesa_hash_pointer(const void *pointer) return _mesa_hash_data(&pointer, sizeof(pointer)); } +static const uint32_t _mesa_fnv32_1a_offset_bias = 2166136261u; + +static inline uint32_t +_mesa_fnv32_1a_accumulate_block(uint32_t hash, const void *data, size_t size) +{ + const uint8_t *bytes = (const uint8_t *)data; + + while (size-- != 0) { + hash ^= *bytes; + hash = hash * 0x01000193; + bytes++; + } + + return hash; +} + +#define _mesa_fnv32_1a_accumulate(hash, expr) \ + _mesa_fnv32_1a_accumulate_block(hash, &(expr), sizeof(expr)) + /** * This foreach function is safe against deletion (which just replaces * an entry's data with the deleted marker), but not against insertion |