return FALSE;
}
-gboolean item_set_find (gpointer key, gpointer val, gpointer data)
+void put_key_on_list (gpointer key, gpointer val, gpointer data)
{
- return !g_hash_table_lookup_extended (data, key, NULL, NULL);
+ GList** l;
+ l = (GList**) data;
+ *l = g_list_prepend (*l, key);
}
gboolean item_set_equal (gconstpointer a, gconstpointer b)
{
+ GList* l;
+ gboolean equal;
if (g_hash_table_size (a) != g_hash_table_size (b))
return FALSE;
- return (g_hash_table_find (a, item_set_find, b) == NULL);
+ l = NULL;
+ g_hash_table_foreach (a, put_key_on_list, (gpointer) &l);
+ equal = TRUE;
+ while (l != NULL && equal == TRUE)
+ {
+ equal = g_hash_table_lookup_extended (b, l->data, NULL, NULL);
+ l = g_list_next (l);
+ }
+ g_list_free (l);
+ return equal;
}
void hash_item (gpointer key, gpointer val, gpointer data)
}
}
-void put_key_on_list (gpointer key, gpointer val, gpointer data)
-{
- GList** l;
- l = (GList**) data;
- *l = g_list_prepend (*l, key);
-}
-
GHashTable* item_set_closure (GHashTable* item_set, Grammar* grammar)
{
int size;