diff options
author | José Fonseca <[email protected]> | 2008-03-18 12:01:14 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2008-03-18 17:20:56 +0000 |
commit | d26139d6a19aaf8b4dbbaa1ee937fed2283923e4 (patch) | |
tree | 47b50199d6f4c41605bdffb368bf54ad8d024959 | |
parent | 56ac9eb1f6e3826e4e8f7ab0f1fdbeed06c41c9f (diff) |
d3d: Add function to walk through all items in the hash table.
-rw-r--r-- | src/gallium/auxiliary/util/u_hash_table.c | 23 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_hash_table.h | 5 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/util/u_hash_table.c b/src/gallium/auxiliary/util/u_hash_table.c index ac2cb1b540d..f3f16a8d94f 100644 --- a/src/gallium/auxiliary/util/u_hash_table.c +++ b/src/gallium/auxiliary/util/u_hash_table.c @@ -187,6 +187,28 @@ hash_table_remove(struct hash_table *ht, } +enum pipe_error +hash_table_foreach(struct hash_table *ht, + enum pipe_error (*callback)(void *key, void *value, void *data), + void *data) +{ + struct cso_hash_iter iter; + struct hash_table_item *item; + enum pipe_error result; + + iter = cso_hash_first_node(ht->cso); + while (!cso_hash_iter_is_null(iter)) { + item = (struct hash_table_item *)cso_hash_iter_data(iter); + result = callback(item->key, item->value, data); + if(result != PIPE_OK) + return result; + iter = cso_hash_iter_next(iter); + } + + return PIPE_OK; +} + + void hash_table_destroy(struct hash_table *ht) { @@ -196,4 +218,3 @@ hash_table_destroy(struct hash_table *ht) FREE(ht); } - diff --git a/src/gallium/auxiliary/util/u_hash_table.h b/src/gallium/auxiliary/util/u_hash_table.h index d941f2c6b16..1583bd7548c 100644 --- a/src/gallium/auxiliary/util/u_hash_table.h +++ b/src/gallium/auxiliary/util/u_hash_table.h @@ -75,6 +75,11 @@ hash_table_remove(struct hash_table *ht, void *key); +enum pipe_error +hash_table_foreach(struct hash_table *ht, + enum pipe_error (*callback)(void *key, void *value, void *data), + void *data); + void hash_table_destroy(struct hash_table *ht); |