diff options
-rw-r--r-- | src/wayland-hash.c | 14 | ||||
-rw-r--r-- | src/wayland-util.h | 4 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/wayland-hash.c b/src/wayland-hash.c index b299a33..e1c0b6a 100644 --- a/src/wayland-hash.c +++ b/src/wayland-hash.c @@ -186,6 +186,20 @@ hash_table_search(struct wl_hash_table *ht, uint32_t hash) return NULL; } +WL_EXPORT void +wl_hash_table_for_each(struct wl_hash_table *ht, + wl_hash_table_func_t func, void *data) +{ + struct hash_entry *entry; + uint32_t i; + + for (i = 0; i < ht->size; i++) { + entry = ht->table + i; + if (entry_is_present(entry)) + func(entry->data, data); + } +} + WL_EXPORT void * wl_hash_table_lookup(struct wl_hash_table *ht, uint32_t hash) { diff --git a/src/wayland-util.h b/src/wayland-util.h index a9f869a..f46da10 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -65,12 +65,16 @@ struct wl_object { uint32_t id; }; +typedef void (*wl_hash_table_func_t)(void *element, void *data); + struct wl_hash_table; struct wl_hash_table *wl_hash_table_create(void); void wl_hash_table_destroy(struct wl_hash_table *ht); void *wl_hash_table_lookup(struct wl_hash_table *ht, uint32_t hash); int wl_hash_table_insert(struct wl_hash_table *ht, uint32_t hash, void *data); void wl_hash_table_remove(struct wl_hash_table *ht, uint32_t hash); +void wl_hash_table_for_each(struct wl_hash_table *ht, + wl_hash_table_func_t func, void *data); /** * wl_list - linked list |