summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wayland-hash.c14
-rw-r--r--src/wayland-util.h4
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