[glib] Use G_DEFINE_[BOXED|POINTER]_TYPE instead of handwritten code



commit 71e73ffdfbd7a33f4e233cfe1353adf143a2c14c
Author: Christian Persch <chpe gnome org>
Date:   Sat May 24 16:08:28 2008 +0200

    Use G_DEFINE_[BOXED|POINTER]_TYPE instead of handwritten code
    
    Now that we have convenience macros to implement boxed and pointer
    types, use them.

 gio/gdbusintrospection.c |   17 +---
 gio/gfileattribute.c     |   20 +----
 gio/gfileinfo.c          |   20 +----
 gio/gsrvtarget.c         |   17 +---
 gobject/gboxed.c         |  215 ++++++++--------------------------------------
 gobject/gsourceclosure.c |   14 +---
 gobject/gvaluetypes.c    |   10 +--
 7 files changed, 50 insertions(+), 263 deletions(-)
---
diff --git a/gio/gdbusintrospection.c b/gio/gdbusintrospection.c
index 306a20f..1583d7f 100644
--- a/gio/gdbusintrospection.c
+++ b/gio/gdbusintrospection.c
@@ -45,21 +45,8 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 
-/* See also https://bugzilla.gnome.org/show_bug.cgi?id=449565 ... */
-#define _MY_DEFINE_BOXED_TYPE(TypeName, type_name)                     \
-  GType                                                                 \
-  type_name##_get_type (void)                                           \
-  {                                                                     \
-    static volatile gsize type_volatile = 0;                            \
-    if (g_once_init_enter (&type_volatile))                             \
-      {                                                                 \
-        GType type = g_boxed_type_register_static (g_intern_static_string (#TypeName),  \
-                                                   (GBoxedCopyFunc) type_name##_ref,    \
-                                                   (GBoxedFreeFunc) type_name##_unref); \
-        g_once_init_leave (&type_volatile, type);                       \
-      }                                                                 \
-    return (GType) type_volatile;                                       \
-  }
+#define _MY_DEFINE_BOXED_TYPE(TypeName, type_name) \
+  G_DEFINE_BOXED_TYPE (TypeName, type_name, type_name##_ref, type_name##_unref)
 
 _MY_DEFINE_BOXED_TYPE (GDBusNodeInfo,       g_dbus_node_info);
 _MY_DEFINE_BOXED_TYPE (GDBusInterfaceInfo,  g_dbus_interface_info);
diff --git a/gio/gfileattribute.c b/gio/gfileattribute.c
index 3a50f4b..47b9425 100644
--- a/gio/gfileattribute.c
+++ b/gio/gfileattribute.c
@@ -336,23 +336,9 @@ _g_file_attribute_value_dup (const GFileAttributeValue *other)
   return attr;
 }
 
-GType
-g_file_attribute_info_list_get_type (void)
-{
-  static volatile gsize g_define_type_id__volatile = 0;
-
-  if (g_once_init_enter (&g_define_type_id__volatile))
-    {
-      GType g_define_type_id =
-        g_boxed_type_register_static (I_("GFileAttributeInfoList"),
-                                      (GBoxedCopyFunc) g_file_attribute_info_list_dup,
-                                      (GBoxedFreeFunc) g_file_attribute_info_list_unref);
-
-      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
-    }
-
-  return g_define_type_id__volatile;
-}
+G_DEFINE_BOXED_TYPE (GFileAttributeInfoList, g_file_attribute_info_list,
+                     g_file_attribute_info_list_dup,
+                     g_file_attribute_info_list_unref)
 
 static gboolean
 valid_char (char c)
diff --git a/gio/gfileinfo.c b/gio/gfileinfo.c
index 264ccf1..439024d 100644
--- a/gio/gfileinfo.c
+++ b/gio/gfileinfo.c
@@ -2147,23 +2147,9 @@ matcher_add (GFileAttributeMatcher *matcher,
   g_array_append_val (matcher->more_sub_matchers, s);
 }
 
-GType
-g_file_attribute_matcher_get_type (void)
-{
-  static volatile gsize g_define_type_id__volatile = 0;
-
-  if (g_once_init_enter (&g_define_type_id__volatile))
-    {
-      GType g_define_type_id =
-        g_boxed_type_register_static (I_("GFileAttributeMatcher"),
-                                      (GBoxedCopyFunc) g_file_attribute_matcher_ref,
-                                      (GBoxedFreeFunc) g_file_attribute_matcher_unref);
-
-      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
-    }
-
-  return g_define_type_id__volatile;
-}
+G_DEFINE_BOXED_TYPE (GFileAttributeMatcher, g_file_attribute_matcher,
+                     g_file_attribute_matcher_ref,
+                     g_file_attribute_matcher_unref)
 
 /**
  * g_file_attribute_matcher_new:
diff --git a/gio/gsrvtarget.c b/gio/gsrvtarget.c
index ac70627..46bbeae 100644
--- a/gio/gsrvtarget.c
+++ b/gio/gsrvtarget.c
@@ -65,21 +65,8 @@ struct _GSrvTarget {
  * A single target host/port that a network service is running on.
  */
 
-GType
-g_srv_target_get_type (void)
-{
-  static volatile gsize type_volatile = 0;
-
-  if (g_once_init_enter (&type_volatile))
-    {
-      GType type = g_boxed_type_register_static (
-                        g_intern_static_string ("GSrvTarget"),
-			(GBoxedCopyFunc) g_srv_target_copy,
-			(GBoxedFreeFunc) g_srv_target_free);
-      g_once_init_leave (&type_volatile, type);
-    }
-  return type_volatile;
-}
+G_DEFINE_BOXED_TYPE (GSrvTarget, g_srv_target,
+                     g_srv_target_copy, g_srv_target_free)
 
 /**
  * g_srv_target_new:
diff --git a/gobject/gboxed.c b/gobject/gboxed.c
index 320f7c8..d245ebf 100644
--- a/gobject/gboxed.c
+++ b/gobject/gboxed.c
@@ -53,10 +53,9 @@ value_meminit (GValue *value,
   memset (value->data, 0, sizeof (value->data));
 }
 
-static gpointer
-value_copy (gpointer boxed)
+static GValue *
+value_copy (GValue *src_value)
 {
-  const GValue *src_value = boxed;
   GValue *dest_value = g_new0 (GValue, 1);
 
   if (G_VALUE_TYPE (src_value))
@@ -68,10 +67,8 @@ value_copy (gpointer boxed)
 }
 
 static void
-value_free (gpointer boxed)
+value_free (GValue *value)
 {
-  GValue *value = boxed;
-
   if (G_VALUE_TYPE (value))
     g_value_unset (value);
   g_free (value);
@@ -102,187 +99,64 @@ g_boxed_type_init (void)
   g_assert (type == G_TYPE_BOXED);
 }
 
-GType
-g_closure_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GClosure"),
-					    (GBoxedCopyFunc) g_closure_ref,
-					    (GBoxedFreeFunc) g_closure_unref);
-  return type_id;
-}
-
-GType
-g_value_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GValue"),
-					    value_copy,
-					    value_free);
-  return type_id;
-}
-
-GType
-g_value_array_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GValueArray"),
-					    (GBoxedCopyFunc) g_value_array_copy,
-					    (GBoxedFreeFunc) g_value_array_free);
-  return type_id;
-}
-
-static gpointer
-gdate_copy (gpointer boxed)
+static GDate *
+gdate_copy (GDate *date)
 {
-  const GDate *date = (const GDate*) boxed;
-
   return g_date_new_julian (g_date_get_julian (date));
 }
 
-GType
-g_date_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GDate"),
-					    (GBoxedCopyFunc) gdate_copy,
-					    (GBoxedFreeFunc) g_date_free);
-  return type_id;
-}
-
-GType
-g_strv_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GStrv"),
-					    (GBoxedCopyFunc) g_strdupv,
-					    (GBoxedFreeFunc) g_strfreev);
-  return type_id;
-}
-
-static gpointer
-gstring_copy (gpointer boxed)
+static GString *
+gstring_copy (GString *src_gstring)
 {
-  const GString *src_gstring = boxed;
-
   return g_string_new_len (src_gstring->str, src_gstring->len);
 }
 
 static void
-gstring_free (gpointer boxed)
+gstring_free (GString *gstring)
 {
-  GString *gstring = boxed;
-
   g_string_free (gstring, TRUE);
 }
 
-GType
-g_gstring_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GString"),
-                                            /* the naming is a bit odd, but GString is obviously not G_TYPE_STRING */
-					    gstring_copy,
-					    gstring_free);
-  return type_id;
-}
-
-static gpointer
-hash_table_copy (gpointer boxed)
-{
-  GHashTable *hash_table = boxed;
-  return g_hash_table_ref (hash_table);
-}
-
-static void
-hash_table_free (gpointer boxed)
-{
-  GHashTable *hash_table = boxed;
-  g_hash_table_unref (hash_table);
-}
-
-GType
-g_hash_table_get_type (void)
-{
-  static GType type_id = 0;
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GHashTable"),
-					    hash_table_copy, hash_table_free);
-  return type_id;
-}
-
-GType
-g_regex_get_type (void)
-{
-  static GType type_id = 0;
+G_DEFINE_BOXED_TYPE (GClosure, g_closure, g_closure_ref, g_closure_unref)
+G_DEFINE_BOXED_TYPE (GValue, g_value, value_copy, value_free)
+G_DEFINE_BOXED_TYPE (GValueArray, g_value_array, g_value_array_copy, g_value_array_free)
+G_DEFINE_BOXED_TYPE (GDate, g_date, gdate_copy, g_date_free)
+/* the naming is a bit odd, but GString is obviously not G_TYPE_STRING */
+G_DEFINE_BOXED_TYPE (GString, g_gstring, gstring_copy, gstring_free)
+G_DEFINE_BOXED_TYPE (GHashTable, g_hash_table, g_hash_table_ref, g_hash_table_unref)
+G_DEFINE_BOXED_TYPE (GArray, g_array, g_array_ref, g_array_unref)
+G_DEFINE_BOXED_TYPE (GPtrArray, g_ptr_array,g_ptr_array_ref, g_ptr_array_unref)
+G_DEFINE_BOXED_TYPE (GByteArray, g_byte_array, g_byte_array_ref, g_byte_array_unref)
 
 #ifdef ENABLE_REGEX
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GRegex"),
-					    (GBoxedCopyFunc) g_regex_ref,
-					    (GBoxedFreeFunc) g_regex_unref);
-#endif
-
-  return type_id;
-}
+G_DEFINE_BOXED_TYPE (GRegex, g_regex, g_regex_ref, g_regex_unref)
+#else
+GType g_regex_get_type (void) { return G_TYPE_INVALID; }
+#endif /* ENABLE_REGEX */
 
-GType
-g_array_get_type (void)
-{
-  static GType type_id = 0;
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GArray"),
-					    (GBoxedCopyFunc) g_array_ref,
-                                            (GBoxedFreeFunc) g_array_unref);
-  return type_id;
-}
+#define g_variant_type_get_type g_variant_type_get_gtype
+G_DEFINE_BOXED_TYPE (GVariantType, g_variant_type, g_variant_type_copy, g_variant_type_free)
+#undef g_variant_type_get_type
 
-GType
-g_ptr_array_get_type (void)
-{
-  static GType type_id = 0;
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GPtrArray"),
-					    (GBoxedCopyFunc) g_ptr_array_ref,
-                                            (GBoxedFreeFunc) g_ptr_array_unref);
-  return type_id;
-}
+G_DEFINE_BOXED_TYPE (GError, g_error, g_error_copy, g_error_free)
 
+/* This one can't use G_DEFINE_BOXED_TYPE (GStrv, g_strv, g_strdupv, g_strfreev) */
 GType
-g_byte_array_get_type (void)
+g_strv_get_type (void)
 {
-  static GType type_id = 0;
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GByteArray"),
-					    (GBoxedCopyFunc) g_byte_array_ref,
-                                            (GBoxedFreeFunc) g_byte_array_unref);
-
-  return type_id;
-}
+  static volatile gsize g_define_type_id__volatile = 0;
 
-GType
-g_variant_type_get_gtype (void)
-{
-  static GType type_id = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      GType g_define_type_id =
+        g_boxed_type_register_static (g_intern_static_string ("GStrv"),
+                                      (GBoxedCopyFunc) g_strdupv,
+                                      (GBoxedFreeFunc) g_strfreev);
 
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GVariantType"),
-                                            (GBoxedCopyFunc) g_variant_type_copy,
-                                            (GBoxedFreeFunc) g_variant_type_free);
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
 
-  return type_id;
+  return g_define_type_id__volatile;
 }
 
 /**
@@ -297,19 +171,6 @@ g_variant_get_gtype (void)
   return G_TYPE_VARIANT;
 }
 
-GType
-g_error_get_type (void)
-{
-  static GType type_id = 0;
-
-  if (!type_id)
-    type_id = g_boxed_type_register_static (g_intern_static_string ("GError"),
-                                            (GBoxedCopyFunc) g_error_copy,
-                                            (GBoxedFreeFunc) g_error_free);
-
-  return type_id;
-}
-
 static void
 boxed_proxy_value_init (GValue *value)
 {
diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c
index 54e08ec..0da5027 100644
--- a/gobject/gsourceclosure.c
+++ b/gobject/gsourceclosure.c
@@ -26,19 +26,7 @@
 #include "gvalue.h"
 #include "gvaluetypes.h"
 
-
-GType
-g_io_channel_get_type (void)
-{
-  static GType our_type = 0;
-  
-  if (our_type == 0)
-    our_type = g_boxed_type_register_static ("GIOChannel",
-					     (GBoxedCopyFunc) g_io_channel_ref,
-					     (GBoxedFreeFunc) g_io_channel_unref);
-
-  return our_type;
-}
+G_DEFINE_BOXED_TYPE (GIOChannel, g_io_channel, g_io_channel_ref, g_io_channel_unref)
 
 GType
 g_io_condition_get_type (void)
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
index 455f86c..8bd612f 100644
--- a/gobject/gvaluetypes.c
+++ b/gobject/gvaluetypes.c
@@ -1129,15 +1129,7 @@ g_value_get_pointer (const GValue *value)
   return value->data[0].v_pointer;
 }
 
-GType
-g_gtype_get_type (void)
-{
-  static const GTypeInfo type_info = { 0, };
-  static GType type;
-  if (!type)
-    type = g_type_register_static (G_TYPE_POINTER, g_intern_static_string ("GType"), &type_info, 0);
-  return type;
-}
+G_DEFINE_POINTER_TYPE (GType, g_gtype)
 
 /**
  * g_value_set_gtype:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]