new function g_log_set_always_fatal() to set an additional fatal_mask for
[platform/upstream/glib.git] / glib / grel.c
index 979a7d1..5fdf880 100644 (file)
@@ -26,11 +26,11 @@ struct _GRealRelation
 {
   gint fields;
   gint current_field;
-
+  
   GHashTable   *all_tuples;
   GHashTable  **hashed_tuple_tables;
   GMemChunk    *tuple_chunk;
-
+  
   gint count;
 };
 
@@ -47,7 +47,7 @@ tuple_equal_2 (gconstpointer v_a,
 {
   gpointer* a = (gpointer*) v_a;
   gpointer* b = (gpointer*) v_b;
-
+  
   return a[0] == b[0] && a[1] == b[1];
 }
 
@@ -55,7 +55,7 @@ static guint
 tuple_hash_2 (gconstpointer v_a)
 {
   gpointer* a = (gpointer*) v_a;
-
+  
   return (gulong)a[0] ^ (gulong)a[1];
 }
 
@@ -69,7 +69,7 @@ tuple_hash (gint fields)
     default:
       g_error ("no tuple hash for %d", fields);
     }
-
+  
   return NULL;
 }
 
@@ -83,7 +83,7 @@ tuple_equal (gint fields)
     default:
       g_error ("no tuple equal for %d", fields);
     }
-
+  
   return NULL;
 }
 
@@ -91,7 +91,7 @@ GRelation*
 g_relation_new (gint fields)
 {
   GRealRelation* rel = g_new0 (GRealRelation, 1);
-
+  
   rel->fields = fields;
   rel->tuple_chunk = g_mem_chunk_new ("Relation Chunk",
                                      fields * sizeof (gpointer),
@@ -99,7 +99,7 @@ g_relation_new (gint fields)
                                      G_ALLOC_AND_FREE);
   rel->all_tuples = g_hash_table_new (tuple_hash (fields), tuple_equal (fields));
   rel->hashed_tuple_tables = g_new0 (GHashTable*, fields);
-
+  
   return (GRelation*) rel;
 }
 
@@ -114,12 +114,12 @@ g_relation_destroy (GRelation *relation)
 {
   GRealRelation *rel = (GRealRelation *) relation;
   gint i;
-
+  
   if (rel)
     {
       g_hash_table_destroy (rel->all_tuples);
       g_mem_chunk_destroy (rel->tuple_chunk);
-
+      
       for (i = 0; i < rel->fields; i += 1)
        {
          if (rel->hashed_tuple_tables[i])
@@ -128,7 +128,7 @@ g_relation_destroy (GRelation *relation)
              g_hash_table_destroy (rel->hashed_tuple_tables[i]);
            }
        }
-
+      
       g_free (rel->hashed_tuple_tables);
       g_free (rel);
     }
@@ -141,9 +141,9 @@ g_relation_index (GRelation   *relation,
                  GCompareFunc key_compare_func)
 {
   GRealRelation *rel = (GRealRelation *) relation;
-
+  
   g_assert (rel->count == 0 && rel->hashed_tuple_tables[field] == NULL);
-
+  
   rel->hashed_tuple_tables[field] = g_hash_table_new (hash_func, key_compare_func);
 }
 
@@ -155,38 +155,38 @@ g_relation_insert (GRelation   *relation,
   gpointer* tuple = g_chunk_new (gpointer, rel->tuple_chunk);
   va_list args;
   gint i;
-
+  
   va_start(args, relation);
-
+  
   for (i = 0; i < rel->fields; i += 1)
     tuple[i] = va_arg(args, gpointer);
-
+  
   va_end(args);
-
+  
   g_hash_table_insert (rel->all_tuples, tuple, tuple);
-
+  
   rel->count += 1;
-
+  
   for (i = 0; i < rel->fields; i += 1)
     {
       GHashTable *table;
       gpointer    key;
       GHashTable *per_key_table;
-
+      
       table = rel->hashed_tuple_tables[i];
-
+      
       if (table == NULL)
        continue;
-
+      
       key = tuple[i];
       per_key_table = g_hash_table_lookup (table, key);
-
+      
       if (per_key_table == NULL)
        {
          per_key_table = g_hash_table_new (tuple_hash (rel->fields), tuple_equal (rel->fields));
          g_hash_table_insert (table, key, per_key_table);
        }
-
+      
       g_hash_table_insert (per_key_table, tuple, tuple);
     }
 }
@@ -197,31 +197,31 @@ g_relation_delete_tuple (gpointer tuple_key, gpointer tuple_value, gpointer user
   gpointer      *tuple = (gpointer*) tuple_value;
   GRealRelation *rel = (GRealRelation *) user_data;
   gint           j;
-
+  
   g_assert (tuple_key == tuple_value);
-
+  
   for (j = 0; j < rel->fields; j += 1)
     {
       GHashTable *one_table = rel->hashed_tuple_tables[j];
       gpointer    one_key;
       GHashTable *per_key_table;
-
+      
       if (one_table == NULL)
        continue;
-
+      
       if (j == rel->current_field)
        /* can't delete from the table we're foreaching in */
        continue;
-
+      
       one_key = tuple[j];
-
+      
       per_key_table = g_hash_table_lookup (one_table, one_key);
-
+      
       g_hash_table_remove (per_key_table, tuple);
     }
-
+  
   g_hash_table_remove (rel->all_tuples, tuple);
-
+  
   rel->count -= 1;
 }
 
@@ -234,24 +234,24 @@ g_relation_delete  (GRelation   *relation,
   GHashTable *table = rel->hashed_tuple_tables[field];
   GHashTable *key_table;
   gint        count = rel->count;
-
+  
   g_assert (table);
-
+  
   key_table = g_hash_table_lookup (table, key);
-
+  
   if (!key_table)
     return 0;
-
+  
   rel->current_field = field;
-
+  
   g_hash_table_foreach (key_table, g_relation_delete_tuple, rel);
-
+  
   g_hash_table_remove (table, key);
-
+  
   g_hash_table_destroy (key_table);
-
-  /* @@@ Remove empty hash tables. */
-
+  
+  /* @@@ FIXME: Remove empty hash tables. */
+  
   return count - rel->count;
 }
 
@@ -261,13 +261,13 @@ g_relation_select_tuple (gpointer tuple_key, gpointer tuple_value, gpointer user
   gpointer    *tuple = (gpointer*) tuple_value;
   GRealTuples *tuples = (GRealTuples*) user_data;
   gint stride = sizeof (gpointer) * tuples->width;
-
+  
   g_assert (tuple_key == tuple_value);
-
+  
   memcpy (tuples->data + (tuples->len * tuples->width),
          tuple,
          stride);
-
+  
   tuples->len += 1;
 }
 
@@ -281,23 +281,23 @@ g_relation_select (GRelation   *relation,
   GHashTable  *key_table;
   GRealTuples *tuples = g_new0 (GRealTuples, 1);
   gint count;
-
+  
   g_assert (table);
-
+  
   key_table = g_hash_table_lookup (table, key);
-
+  
   if (!key_table)
     return (GTuples*)tuples;
-
+  
   count = g_relation_count (relation, key, field);
-
+  
   tuples->data = g_malloc (sizeof (gpointer) * rel->fields * count);
   tuples->width = rel->fields;
-
+  
   g_hash_table_foreach (key_table, g_relation_select_tuple, tuples);
-
+  
   g_assert (count == tuples->len);
-
+  
   return (GTuples*)tuples;
 }
 
@@ -309,14 +309,14 @@ g_relation_count (GRelation   *relation,
   GRealRelation *rel = (GRealRelation *) relation;
   GHashTable  *table = rel->hashed_tuple_tables[field];
   GHashTable  *key_table;
-
+  
   g_assert (table);
-
+  
   key_table = g_hash_table_lookup (table, key);
-
+  
   if (!key_table)
     return 0;
-
+  
   return g_hash_table_size (key_table);
 }
 
@@ -328,18 +328,18 @@ g_relation_exists (GRelation   *relation, ...)
   va_list args;
   gint i;
   gboolean result;
-
+  
   va_start(args, relation);
-
+  
   for (i = 0; i < rel->fields; i += 1)
     tuple[i] = va_arg(args, gpointer);
-
+  
   va_end(args);
-
+  
   result = g_hash_table_lookup (rel->all_tuples, tuple) != NULL;
-
+  
   g_mem_chunk_free (rel->tuple_chunk, tuple);
-
+  
   return result;
 }
 
@@ -347,7 +347,7 @@ void
 g_tuples_destroy (GTuples *tuples0)
 {
   GRealTuples *tuples = (GRealTuples*) tuples0;
-
+  
   if (tuples)
     {
       g_free (tuples->data);
@@ -361,9 +361,9 @@ g_tuples_index (GTuples     *tuples0,
                gint         field)
 {
   GRealTuples *tuples = (GRealTuples*) tuples0;
-
+  
   g_assert (field < tuples->width);
-
+  
   return tuples->data[index * tuples->width + field];
 }
 
@@ -376,20 +376,23 @@ g_relation_print_one (gpointer tuple_key,
                      gpointer user_data)
 {
   gint i;
+  GString *gstring;
   GRealRelation* rel = (GRealRelation*) user_data;
   gpointer* tuples = (gpointer*) tuple_value;
 
-  g_print ("[");
-
+  gstring = g_string_new ("[");
+  
   for (i = 0; i < rel->fields; i += 1)
     {
-      g_print ("%p", tuples[i]);
-
+      g_string_sprintfa (gstring, "%p", tuples[i]);
+      
       if (i < (rel->fields - 1))
-       g_print (",");
+       g_string_append (gstring, ",");
     }
-
-  g_print ("]\n");
+  
+  g_string_append (gstring, "]");
+  g_log (g_log_domain_glib, G_LOG_LEVEL_INFO, gstring->str);
+  g_string_free (gstring, TRUE);
 }
 
 static void
@@ -399,9 +402,9 @@ g_relation_print_index (gpointer tuple_key,
 {
   GRealRelation* rel = (GRealRelation*) user_data;
   GHashTable* table = (GHashTable*) tuple_value;
-
-  g_print ("*** key %p\n", tuple_key);
-
+  
+  g_log (g_log_domain_glib, G_LOG_LEVEL_INFO, "*** key %p", tuple_key);
+  
   g_hash_table_foreach (table,
                        g_relation_print_one,
                        rel);
@@ -412,23 +415,23 @@ g_relation_print (GRelation *relation)
 {
   gint i;
   GRealRelation* rel = (GRealRelation*) relation;
-
-  g_print ("*** all tuples (%d)\n", rel->count);
-
+  
+  g_log (g_log_domain_glib, G_LOG_LEVEL_INFO, "*** all tuples (%d)", rel->count);
+  
   g_hash_table_foreach (rel->all_tuples,
                        g_relation_print_one,
                        rel);
-
+  
   for (i = 0; i < rel->fields; i += 1)
     {
       if (rel->hashed_tuple_tables[i] == NULL)
        continue;
-
-      g_print ("*** index %d\n", i);
-
+      
+      g_log (g_log_domain_glib, G_LOG_LEVEL_INFO, "*** index %d", i);
+      
       g_hash_table_foreach (rel->hashed_tuple_tables[i],
                            g_relation_print_index,
                            rel);
     }
-
+  
 }