diff options
author | Tim Janik <timj@gtk.org> | 1998-08-18 03:50:35 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-08-18 03:50:35 +0000 |
commit | e1f0fb0c1e096407b41c98c7817fc4fc2aba5217 (patch) | |
tree | 85c341f53d4a4fb840a323fc0bf307456b35d48b /grel.c | |
parent | d7f23839498d1f6115ad86a2df4a173206651c82 (diff) | |
download | glib-e1f0fb0c1e096407b41c98c7817fc4fc2aba5217.tar.gz |
new function g_log_set_always_fatal() to set an additional fatal_mask for
Tue Aug 18 04:40:17 1998 Tim Janik <timj@gtk.org>
* glib.h:
* gmessages.c: new function g_log_set_always_fatal() to set an
additional fatal_mask for log levels that are considered to be fatal
globally (required by gtk). since this mask is not domain-associated,
it is restricted to the log levels, introduced by glib itself.
* gmem.c:
* grel.c:
* gtree.c (g_tree_node_check):
don't use g_print() calls for informational/debugging output,
but log all this stuff through g_log() with G_LOG_LEVEL_INFO.
libraries shouldn't use printf(), g_print() or g_printerr() at all.
Diffstat (limited to 'grel.c')
-rw-r--r-- | grel.c | 173 |
1 files changed, 88 insertions, 85 deletions
@@ -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); } - + } |