From 6f969de1b9f2add77d5e2e79671a20d844088e8e Mon Sep 17 00:00:00 2001 From: Andrei Alexeyev Date: Wed, 18 Sep 2024 22:31:34 +0200 Subject: [PATCH] hashtable: fix (and speed up) post-deletion backshift logic --- src/SDL_hashtable.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SDL_hashtable.c b/src/SDL_hashtable.c index 4a655c7ddc0d6b..3cefaa15313402 100644 --- a/src/SDL_hashtable.c +++ b/src/SDL_hashtable.c @@ -215,7 +215,6 @@ static SDL_HashItem *insert_item(SDL_HashItem *restrict item_to_insert, SDL_Hash static void delete_item(SDL_HashTable *restrict ht, SDL_HashItem *item) { Uint32 hash_mask = ht->hash_mask; - Uint32 num_buckets = hash_mask + 1; SDL_HashItem *table = ht->table; if (ht->nuke) { @@ -229,13 +228,14 @@ static void delete_item(SDL_HashTable *restrict ht, SDL_HashItem *item) idx = (idx + 1) & hash_mask; SDL_HashItem *next_item = table + idx; - if (get_probe_length(next_item->hash & hash_mask, idx, num_buckets) < 1) { - item->live = false; + if (next_item->probe_len < 1) { + SDL_zerop(item); return; } *item = *next_item; item->probe_len -= 1; + HT_ASSERT(item->probe_len < ht->max_probe_len); item = next_item; } }