util/set: add _mesa_set_intersects

v2 (Jason Ekstrand): add asserts and iterate over smaller set

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2401>
This commit is contained in:
Karol Herbst 2020-05-15 11:11:13 +02:00 committed by Marge Bot
parent acf756a64f
commit 16f858968f
2 changed files with 23 additions and 0 deletions

View file

@ -570,3 +570,23 @@ _mesa_pointer_set_create(void *mem_ctx)
return _mesa_set_create(mem_ctx, _mesa_hash_pointer,
_mesa_key_pointer_equal);
}
bool
_mesa_set_intersects(struct set *a, struct set *b)
{
assert(a->key_hash_function == b->key_hash_function);
assert(a->key_equals_function == b->key_equals_function);
/* iterate over the set with less entries */
if (b->entries < a->entries) {
struct set *tmp = a;
a = b;
b = tmp;
}
set_foreach(a, entry) {
if (_mesa_set_search_pre_hashed(b, entry->hash, entry->key))
return true;
}
return false;
}

View file

@ -110,6 +110,9 @@ _mesa_set_random_entry(struct set *set,
struct set *
_mesa_pointer_set_create(void *mem_ctx);
bool
_mesa_set_intersects(struct set *a, struct set *b);
/**
* This foreach function is safe against deletion, but not against
* insertion (which may rehash the set, making entry a dangling