util/set: helper to remove entry by key
v2: Add unit test. (Eric Anholt) Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
b034facfbc
commit
fa0c19d17b
|
@ -383,6 +383,15 @@ _mesa_set_remove(struct set *ht, struct set_entry *entry)
|
|||
ht->deleted_entries++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the entry with the corresponding key, if exists.
|
||||
*/
|
||||
void
|
||||
_mesa_set_remove_key(struct set *set, const void *key)
|
||||
{
|
||||
_mesa_set_remove(set, _mesa_set_search(set, key));
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is an iterator over the hash table.
|
||||
*
|
||||
|
|
|
@ -81,6 +81,8 @@ _mesa_set_search_pre_hashed(const struct set *set, uint32_t hash,
|
|||
|
||||
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);
|
||||
|
|
|
@ -85,3 +85,31 @@ TEST(set, clone)
|
|||
_mesa_set_destroy(s, NULL);
|
||||
_mesa_set_destroy(clone, NULL);
|
||||
}
|
||||
|
||||
TEST(set, remove_key)
|
||||
{
|
||||
struct set *s = _mesa_set_create(NULL, _mesa_hash_pointer,
|
||||
_mesa_key_pointer_equal);
|
||||
|
||||
const void *a = (const void *)10;
|
||||
const void *b = (const void *)20;
|
||||
const void *c = (const void *)30;
|
||||
|
||||
_mesa_set_add(s, a);
|
||||
_mesa_set_add(s, b);
|
||||
EXPECT_EQ(s->entries, 2);
|
||||
|
||||
/* Remove existing key. */
|
||||
_mesa_set_remove_key(s, a);
|
||||
EXPECT_EQ(s->entries, 1);
|
||||
EXPECT_FALSE(_mesa_set_search(s, a));
|
||||
EXPECT_TRUE(_mesa_set_search(s, b));
|
||||
|
||||
/* Remove non-existing key. */
|
||||
_mesa_set_remove_key(s, c);
|
||||
EXPECT_EQ(s->entries, 1);
|
||||
EXPECT_FALSE(_mesa_set_search(s, a));
|
||||
EXPECT_TRUE(_mesa_set_search(s, b));
|
||||
|
||||
_mesa_set_destroy(s, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue