const void *deleted_key;
uint32_t size;
uint32_t rehash;
+ uint64_t size_magic;
+ uint64_t rehash_magic;
uint32_t max_entries;
uint32_t size_index;
uint32_t entries;
uint32_t (*key_hash_function)(const void *key),
bool (*key_equals_function)(const void *a,
const void *b));
+
+bool
+_mesa_hash_table_init(struct hash_table *ht,
+ void *mem_ctx,
+ uint32_t (*key_hash_function)(const void *key),
+ bool (*key_equals_function)(const void *a,
+ const void *b));
+
struct hash_table *
_mesa_hash_table_clone(struct hash_table *src, void *dst_mem_ctx);
void _mesa_hash_table_destroy(struct hash_table *ht,
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,
};
* an entry's data with the deleted marker), but not against insertion
* (which may rehash the table, making entry a dangling pointer).
*/
-#define hash_table_foreach(ht, entry) \
- for (entry = _mesa_hash_table_next_entry(ht, NULL); \
- entry != NULL; \
+#define hash_table_foreach(ht, entry) \
+ for (struct hash_entry *entry = _mesa_hash_table_next_entry(ht, NULL); \
+ entry != NULL; \
entry = _mesa_hash_table_next_entry(ht, entry))
static inline void
void *closure),
void *closure)
{
- struct hash_entry *entry;
-
hash_table_foreach(ht, entry)
callback(entry->key, entry->data, closure);
}
*/
struct hash_table_u64 {
struct hash_table *table;
+ void *freed_key_data;
void *deleted_key_data;
};
void
_mesa_hash_table_u64_remove(struct hash_table_u64 *ht, uint64_t key);
+void
+_mesa_hash_table_u64_clear(struct hash_table_u64 *ht,
+ void (*delete_function)(struct hash_entry *entry));
+
#ifdef __cplusplus
} /* extern C */
#endif