2005-05-06 Robert McQueen <robot101@debian.org>
authorRobert McQueen <robot101@debian.org>
Tue, 6 Jun 2006 19:45:39 +0000 (19:45 +0000)
committerRobert McQueen <robot101@debian.org>
Tue, 6 Jun 2006 19:45:39 +0000 (19:45 +0000)
* 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.

ChangeLog
glib/dbus-gvalue-utils.c

index 5234c7d..1959692 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+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.
+
 2006-06-05  Thiago Macieira <thiago.macieira@trolltech.com>
 
        * qt/dbus: Add directory. I had forgotten to add this
index b209839..24012b5 100644 (file)
@@ -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);