}
}
+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);
+}
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