Fixed bug in items related to the comparison of set items
authorThadeu Lima de Souza Cascardo <cascardo@dcc.ufmg.br>
Fri, 30 Sep 2005 15:29:08 +0000 (15:29 +0000)
committerThadeu Lima de Souza Cascardo <cascardo@dcc.ufmg.br>
Fri, 30 Sep 2005 15:29:08 +0000 (15:29 +0000)
The comparison of set items did not work with g_hash_table_find because
hash values were all NULL. Putting the keys in a list and, then,
iterating through it fixed the problem.

git-archimport-id: cascardo@tlscascardo--private/libgrammatic--dev--0.1--patch-17

item.c

diff --git a/item.c b/item.c
index a752dbd..1d7a9e4 100644 (file)
--- a/item.c
+++ b/item.c
@@ -109,16 +109,29 @@ gboolean item_set_add (GHashTable* item_set, item_t* item)
   return FALSE;
 }
 
   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)
 {
 }
 
 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;
   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 hash_item (gpointer key, gpointer val, gpointer data)
@@ -185,13 +198,6 @@ void item_set_closure_step (GHashTable* item_set, Grammar* grammar,
     }
 }
 
     }
 }
 
-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;
 GHashTable* item_set_closure (GHashTable* item_set, Grammar* grammar)
 {
   int size;