From bab08c791de323f021bcedbd93aee04343637482 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 10 May 2019 13:50:56 -0500 Subject: [PATCH] util/set: Add a helper to resize a set Often times you don't know how big a set will be and you want the code to just grow it as needed. However, sometimes you do know and you can avoid a lot of rehashing if you just specify a size up-front. Reviewed-by: Eric Anholt Reviewed-by: Thomas Helland --- src/util/set.c | 14 ++++++++++++++ src/util/set.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/util/set.c b/src/util/set.c index 2fd54a71a6f..c2b97bdea08 100644 --- a/src/util/set.c +++ b/src/util/set.c @@ -280,6 +280,20 @@ set_rehash(struct set *ht, unsigned new_size_index) ralloc_free(old_ht.table); } +void +_mesa_set_resize(struct set *set, uint32_t entries) +{ + /* You can't shrink a set below its number of entries */ + if (set->entries > entries) + entries = set->entries; + + unsigned size_index = 0; + while (hash_sizes[size_index].max_entries < entries) + size_index++; + + set_rehash(set, size_index); +} + /** * Inserts the key with the given hash into the table. * diff --git a/src/util/set.h b/src/util/set.h index 7d277c59f8b..5742c311a77 100644 --- a/src/util/set.h +++ b/src/util/set.h @@ -65,6 +65,8 @@ 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)); -- 2.30.2