Selaa lähdekoodia

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>
tags/mesa-8.0-rc1
Ian Romanick 14 vuotta sitten
vanhempi
commit
1f8f8aef7f
1 muutettua tiedostoa jossa 16 lisäystä ja 16 poistoa
  1. 16
    16
      src/mesa/program/hash_table.c

+ 16
- 16
src/mesa/program/hash_table.c Näytä tiedosto

@@ -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

Loading…
Peruuta
Tallenna