diff options
author | Robert McQueen <robot101@debian.org> | 2006-06-06 19:45:39 +0000 |
---|---|---|
committer | Robert McQueen <robot101@debian.org> | 2006-06-06 19:45:39 +0000 |
commit | 952f6fd369075e0b059ec896c76f477cc687842e (patch) | |
tree | 5c55b2430ede72f71795a77fc1d66dcc0a8443ce /glib | |
parent | 517b8c2446029901e9062e858b723906cf20d7ef (diff) | |
download | dbus-952f6fd369075e0b059ec896c76f477cc687842e.tar.gz |
2005-05-06 Robert McQueen <robot101@debian.org>
* glib/dbus-gvalue-utils.c: Remove duplicated code by having all of
the iterators use gvalue_take_ptrarray_value (the GValues themselves
are discarded without unsetting, so it makes no difference whether
we take or set_static). Remove cases for G_TYPE_POINTER because
there really is nothing useful we can do with them in our
specialised types - we *need* boxed copy/free functions at the very
least.
Diffstat (limited to 'glib')
-rw-r--r-- | glib/dbus-gvalue-utils.c | 91 |
1 files changed, 16 insertions, 75 deletions
diff --git a/glib/dbus-gvalue-utils.c b/glib/dbus-gvalue-utils.c index b2098398..24012b5b 100644 --- a/glib/dbus-gvalue-utils.c +++ b/glib/dbus-gvalue-utils.c @@ -113,9 +113,6 @@ _dbus_gvalue_store (GValue *value, case G_TYPE_STRING: *((gchar **) storage) = (char*) g_value_get_string (value); return TRUE; - case G_TYPE_POINTER: - *((gpointer *) storage) = g_value_get_pointer (value); - return TRUE; case G_TYPE_OBJECT: *((gpointer *) storage) = g_value_get_object (value); return TRUE; @@ -167,9 +164,6 @@ _dbus_gvalue_set_from_pointer (GValue *value, case G_TYPE_STRING: g_value_set_string (value, *((gchar **) storage)); return TRUE; - case G_TYPE_POINTER: - g_value_set_pointer (value, *((gpointer *) storage)); - return TRUE; case G_TYPE_OBJECT: g_value_set_object (value, *((gpointer *) storage)); return TRUE; @@ -403,8 +397,10 @@ _dbus_g_hash_free_from_gtype (GType gtype) return func; } +static void gvalue_take_ptrarray_value (GValue *value, gpointer instance); + static void -gvalue_from_hash_value (GValue *value, gpointer instance) +gvalue_take_hash_value (GValue *value, gpointer instance) { switch (g_type_fundamental (G_VALUE_TYPE (value))) { @@ -426,25 +422,14 @@ gvalue_from_hash_value (GValue *value, gpointer instance) case G_TYPE_DOUBLE: g_value_set_double (value, *(gdouble *) instance); break; - case G_TYPE_STRING: - g_value_set_static_string (value, instance); - break; - case G_TYPE_POINTER: - g_value_set_pointer (value, instance); - break; - case G_TYPE_BOXED: - g_value_set_static_boxed (value, instance); - break; - case G_TYPE_OBJECT: - g_value_set_object (value, instance); - g_object_unref (g_value_get_object (value)); - break; default: - g_assert_not_reached (); + gvalue_take_ptrarray_value (value, instance); break; } } +static gpointer ptrarray_value_from_gvalue (const GValue *value); + static gpointer hash_value_from_gvalue (GValue *value) { @@ -472,21 +457,9 @@ hash_value_from_gvalue (GValue *value) return (gpointer) p; } break; - case G_TYPE_STRING: - return (gpointer) g_value_get_string (value); - break; - case G_TYPE_POINTER: - return g_value_get_pointer (value); - break; - case G_TYPE_BOXED: - return g_value_get_boxed (value); - break; - case G_TYPE_OBJECT: - return g_value_get_object (value); - break; default: - g_assert_not_reached (); - return NULL; + return ptrarray_value_from_gvalue (value); + break; } } @@ -507,8 +480,8 @@ hashtable_foreach_with_values (gpointer key, gpointer value, gpointer user_data) g_value_init (&key_val, data->key_type); g_value_init (&value_val, data->value_type); - gvalue_from_hash_value (&key_val, key); - gvalue_from_hash_value (&value_val, value); + gvalue_take_hash_value (&key_val, key); + gvalue_take_hash_value (&value_val, value); data->func (&key_val, &value_val, data->data); } @@ -749,47 +722,18 @@ ptrarray_constructor (GType type) } static void -gvalue_from_ptrarray_value (GValue *value, gpointer instance) -{ - switch (g_type_fundamental (G_VALUE_TYPE (value))) - { - case G_TYPE_STRING: - g_value_set_string (value, instance); - break; - case G_TYPE_POINTER: - g_value_set_pointer (value, instance); - break; - case G_TYPE_BOXED: - g_value_set_static_boxed (value, instance); - break; - case G_TYPE_OBJECT: - g_value_set_object (value, instance); - g_object_unref (g_value_get_object (value)); - break; - default: - g_assert_not_reached (); - break; - } -} - -static void -gvalue_take_from_ptrarray_value (GValue *value, gpointer instance) +gvalue_take_ptrarray_value (GValue *value, gpointer instance) { switch (g_type_fundamental (G_VALUE_TYPE (value))) { case G_TYPE_STRING: g_value_take_string (value, instance); break; - case G_TYPE_POINTER: - g_value_set_pointer (value, instance); - g_assert_not_reached (); - break; case G_TYPE_BOXED: g_value_take_boxed (value, instance); break; case G_TYPE_OBJECT: g_value_take_object (value, instance); - g_object_unref (g_value_get_object (value)); break; default: g_assert_not_reached (); @@ -805,9 +749,6 @@ ptrarray_value_from_gvalue (const GValue *value) case G_TYPE_STRING: return (gpointer) g_value_get_string (value); break; - case G_TYPE_POINTER: - return g_value_get_pointer (value); - break; case G_TYPE_BOXED: return g_value_get_boxed (value); break; @@ -838,7 +779,7 @@ ptrarray_iterator (GType ptrarray_type, { GValue val = {0, }; g_value_init (&val, elt_gtype); - gvalue_from_ptrarray_value (&val, g_ptr_array_index (ptrarray, i)); + gvalue_take_ptrarray_value (&val, g_ptr_array_index (ptrarray, i)); iterator (&val, user_data); } } @@ -895,7 +836,7 @@ ptrarray_free (GType type, gpointer val) for (i = 0; i < array->len; i++) { g_value_init (&elt_val, elt_gtype); - gvalue_take_from_ptrarray_value (&elt_val, g_ptr_array_index (array, i)); + gvalue_take_ptrarray_value (&elt_val, g_ptr_array_index (array, i)); g_value_unset (&elt_val); } @@ -925,7 +866,7 @@ slist_iterator (GType list_type, { GValue val = {0, }; g_value_init (&val, elt_gtype); - gvalue_from_ptrarray_value (&val, slist->data); + gvalue_take_ptrarray_value (&val, slist->data); iterator (&val, user_data); } } @@ -996,9 +937,9 @@ slist_free (GType type, gpointer val) { GValue elt_val = {0, }; g_value_init (&elt_val, elt_gtype); - gvalue_take_from_ptrarray_value (&elt_val, list->data); + gvalue_take_ptrarray_value (&elt_val, list->data); g_value_unset (&elt_val); - list = g_slist_next(list); + list = g_slist_next(list); } list=val; g_slist_free (list); |