X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fset.h;h=55857aca7ab4a4f9ac899eb4114af12ae2bef7e8;hb=bc79442f3fa23ecb40fcc67ea3cf4fd73fb0d3fe;hp=06e79e158677b8077bb1658939682fe7fb88494a;hpb=5c075b085585b1629022d40ce7af9448c7d0e906;p=mesa.git diff --git a/src/util/set.h b/src/util/set.h index 06e79e15867..55857aca7ab 100644 --- a/src/util/set.h +++ b/src/util/set.h @@ -47,6 +47,8 @@ struct set { bool (*key_equals_function)(const void *a, const void *b); 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; @@ -58,10 +60,15 @@ _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_clone(struct set *set, void *dst_mem_ctx); + void _mesa_set_destroy(struct set *set, void (*delete_function)(struct set_entry *entry)); void +_mesa_set_resize(struct set *set, uint32_t entries); +void _mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry)); @@ -70,14 +77,28 @@ _mesa_set_add(struct set *set, const void *key); struct set_entry * _mesa_set_add_pre_hashed(struct set *set, uint32_t hash, const void *key); +struct set_entry * +_mesa_set_search_or_add(struct set *set, const void *key); +struct set_entry * +_mesa_set_search_or_add_pre_hashed(struct set *set, uint32_t hash, + const void *key); + struct set_entry * _mesa_set_search(const struct set *set, const void *key); struct set_entry * _mesa_set_search_pre_hashed(const struct set *set, uint32_t hash, const void *key); +struct set_entry * +_mesa_set_search_and_add(struct set *set, const void *key, bool *replaced); +struct set_entry * +_mesa_set_search_and_add_pre_hashed(struct set *set, uint32_t hash, + const void *key, bool *replaced); + void _mesa_set_remove(struct set *set, struct set_entry *entry); +void +_mesa_set_remove_key(struct set *set, const void *key); struct set_entry * _mesa_set_next_entry(const struct set *set, struct set_entry *entry); @@ -86,14 +107,17 @@ 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 * pointer). */ -#define set_foreach(set, entry) \ - for (entry = _mesa_set_next_entry(set, NULL); \ - entry != NULL; \ +#define set_foreach(set, entry) \ + for (struct set_entry *entry = _mesa_set_next_entry(set, NULL); \ + entry != NULL; \ entry = _mesa_set_next_entry(set, entry)) #ifdef __cplusplus