[Utils] Add an iteration function to MonoConcurrentHashTable
authoriain holmes <iain@xamarin.com>
Tue, 12 May 2015 14:00:24 +0000 (15:00 +0100)
committeriain holmes <iain@xamarin.com>
Fri, 15 May 2015 14:32:54 +0000 (15:32 +0100)
mono/utils/mono-conc-hashtable.c
mono/utils/mono-conc-hashtable.h

index ae97769a64bdd57b84323bf55347a0d324e96a56..8e89745ca5b8b17380abddc9b07019a3f070402f 100644 (file)
@@ -352,20 +352,18 @@ mono_conc_hashtable_insert (MonoConcurrentHashTable *hash_table, gpointer key, g
        }
 }
 
+void
+mono_conc_hashtable_foreach (MonoConcurrentHashTable *hash_table, GHFunc func, gpointer userdata)
+{
+       int i;
+       conc_table *table = (conc_table*)hash_table->table;
+       key_value_pair *kvs = table->kvs;
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+  mono_mutex_lock (hash_table->mutex);
+       for (i = 0; i < table->table_size; ++i) {
+               if (kvs [i].key && kvs [i].key != TOMBSTONE) {
+                       func (kvs [i].key, kvs [i].value, userdata);
+               }
+       }
+       mono_mutex_unlock (hash_table->mutex);
+}
index e6094b7e32c2dc7372a839da346750a57e710b33..91d4e1948b1c6706da1f46665c1ecef32ed5a7fb 100644 (file)
@@ -23,6 +23,7 @@ MONO_API void mono_conc_hashtable_destroy (MonoConcurrentHashTable *hash_table);
 MONO_API gpointer mono_conc_hashtable_lookup (MonoConcurrentHashTable *hash_table, gpointer key);
 MONO_API gpointer mono_conc_hashtable_insert (MonoConcurrentHashTable *hash_table, gpointer key, gpointer value);
 MONO_API gpointer mono_conc_hashtable_remove (MonoConcurrentHashTable *hash_table, gpointer key);
+MONO_API void mono_conc_hashtable_foreach (MonoConcurrentHashTable *hashtable, GHFunc func, gpointer userdata);
 
-#endif
 
+#endif