mesa: Refactor hash_table_{find,remove} to share some code
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -108,8 +108,8 @@ hash_table_clear(struct hash_table *ht)
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
hash_table_find(struct hash_table *ht, const void *key)
|
||||
static struct hash_node *
|
||||
get_node(struct hash_table *ht, const void *key)
|
||||
{
|
||||
const unsigned hash_value = (*ht->hash)(key);
|
||||
const unsigned bucket = hash_value % ht->num_buckets;
|
||||
@@ -119,13 +119,20 @@ hash_table_find(struct hash_table *ht, const void *key)
|
||||
struct hash_node *hn = (struct hash_node *) node;
|
||||
|
||||
if ((*ht->compare)(hn->key, key) == 0) {
|
||||
return hn->data;
|
||||
return hn;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
hash_table_find(struct hash_table *ht, const void *key)
|
||||
{
|
||||
struct hash_node *hn = get_node(ht, key);
|
||||
|
||||
return (hn == NULL) ? NULL : hn->data;
|
||||
}
|
||||
|
||||
void
|
||||
hash_table_insert(struct hash_table *ht, void *data, const void *key)
|
||||
@@ -145,19 +152,12 @@ hash_table_insert(struct hash_table *ht, void *data, const void *key)
|
||||
void
|
||||
hash_table_remove(struct hash_table *ht, const void *key)
|
||||
{
|
||||
const unsigned hash_value = (*ht->hash)(key);
|
||||
const unsigned bucket = hash_value % ht->num_buckets;
|
||||
struct node *node;
|
||||
|
||||
foreach(node, & ht->buckets[bucket]) {
|
||||
struct hash_node *hn = (struct hash_node *) node;
|
||||
|
||||
if ((*ht->compare)(hn->key, key) == 0) {
|
||||
remove_from_list(node);
|
||||
free(node);
|
||||
return;
|
||||
}
|
||||
}
|
||||
struct node *node = (struct node *) get_node(ht, key);
|
||||
if (node != NULL) {
|
||||
remove_from_list(node);
|
||||
free(node);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user