Add wl_hash_table_for_each()
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 19 Aug 2011 18:48:16 +0000 (14:48 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 27 Aug 2011 16:06:11 +0000 (12:06 -0400)
src/wayland-hash.c
src/wayland-util.h

index b299a33..e1c0b6a 100644 (file)
@@ -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)
 {
index a9f869a..f46da10 100644 (file)
@@ -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