[glib/gdbus] Add reference counting and boxed types for array types



commit f3ec28ef491edfa43ac8321cc53341e9ea130d4f
Author: David Zeuthen <davidz redhat com>
Date:   Sat Apr 25 22:39:04 2009 -0400

    Add reference counting and boxed types for array types
---
 docs/reference/glib/glib-sections.txt        |    9 +
 docs/reference/glib/tmpl/arrays.sgml         |   41 ++++-
 docs/reference/glib/tmpl/arrays_byte.sgml    |   23 +++-
 docs/reference/glib/tmpl/arrays_pointer.sgml |   54 +++++-
 docs/reference/gobject/gobject-sections.txt  |    3 +
 glib/garray.c                                |  233 +++++++++++++++++++++++++-
 glib/garray.h                                |   10 +
 glib/glib.symbols                            |    9 +
 gobject/gboxed.c                             |   33 ++++
 gobject/gboxed.h                             |   27 +++
 gobject/gobject.symbols                      |    3 +
 11 files changed, 422 insertions(+), 23 deletions(-)

diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
index 6df70cb..e746973 100644
--- a/docs/reference/glib/glib-sections.txt
+++ b/docs/reference/glib/glib-sections.txt
@@ -2113,6 +2113,9 @@ g_string_chunk_free
 GArray
 g_array_new
 g_array_sized_new
+g_array_ref
+g_array_unref
+g_array_get_element_size
 g_array_append_val
 g_array_append_vals
 g_array_prepend_val
@@ -2135,6 +2138,10 @@ g_array_free
 GPtrArray
 g_ptr_array_new
 g_ptr_array_sized_new
+g_ptr_array_new_with_free_func
+g_ptr_array_set_free_func
+g_ptr_array_ref
+g_ptr_array_unref
 g_ptr_array_add
 g_ptr_array_remove
 g_ptr_array_remove_index
@@ -2156,6 +2163,8 @@ g_ptr_array_foreach
 GByteArray
 g_byte_array_new
 g_byte_array_sized_new
+g_byte_array_ref
+g_byte_array_unref
 g_byte_array_append
 g_byte_array_prepend
 g_byte_array_remove_index
diff --git a/docs/reference/glib/tmpl/arrays.sgml b/docs/reference/glib/tmpl/arrays.sgml
index 34c5497..890e15c 100644
--- a/docs/reference/glib/tmpl/arrays.sgml
+++ b/docs/reference/glib/tmpl/arrays.sgml
@@ -69,7 +69,7 @@ added to the #GArray.
 
 <!-- ##### FUNCTION g_array_new ##### -->
 <para>
-Creates a new #GArray.
+Creates a new #GArray with a reference count of 1.
 </para>
 
 @zero_terminated: %TRUE if the array should have an extra element at the end
@@ -83,9 +83,9 @@ when they are allocated.
 <!-- ##### FUNCTION g_array_sized_new ##### -->
 <para>
 Creates a new #GArray with @reserved_size elements
-preallocated. This avoids frequent reallocation, if you are going to
-add many elements to the array. Note however that the size of the
-array is still 0.
+preallocated and a reference count of 1. This avoids frequent reallocation,
+if you are going to add many elements to the array. Note however that the
+size of the array is still 0.
 </para>
 
 @zero_terminated: %TRUE if the array should have an extra element at the end with all bits cleared.
@@ -95,6 +95,32 @@ array is still 0.
 @Returns: the new #GArray.
 
 
+<!-- ##### FUNCTION g_array_ref ##### -->
+<para>
+
+</para>
+
+ array: 
+ Returns: 
+
+
+<!-- ##### FUNCTION g_array_unref ##### -->
+<para>
+
+</para>
+
+ array: 
+
+
+<!-- ##### FUNCTION g_array_get_element_size ##### -->
+<para>
+
+</para>
+
+ array: 
+ Returns: 
+
+
 <!-- ##### MACRO g_array_append_val ##### -->
 <para>
 Adds the value on to the end of the array.
@@ -292,8 +318,11 @@ If the array was created with @clear_ set to %TRUE, the new elements are set to
 <para>
 Frees the memory allocated for the #GArray.
 If @free_segment is %TRUE it frees the memory block holding the elements
-as well. Pass %FALSE if you want to free the #GArray wrapper but preserve
-the underlying array for use elsewhere.
+as well and also each element if @array has a @element_free_func set.
+Pass %FALSE if you want to free the #GArray wrapper but preserve
+the underlying array for use elsewhere. If the reference count of @array
+is greater than one, the #GArray wrapper is preserved but the size of
+ array will be set to zero.
 </para>
 <note>
 <para>
diff --git a/docs/reference/glib/tmpl/arrays_byte.sgml b/docs/reference/glib/tmpl/arrays_byte.sgml
index eb3c400..b1c4e4f 100644
--- a/docs/reference/glib/tmpl/arrays_byte.sgml
+++ b/docs/reference/glib/tmpl/arrays_byte.sgml
@@ -63,7 +63,7 @@ added to the #GByteArray.
 
 <!-- ##### FUNCTION g_byte_array_new ##### -->
 <para>
-Creates a new #GByteArray.
+Creates a new #GByteArray with a reference count of 1.
 </para>
 
 @Returns: the new #GByteArray.
@@ -80,6 +80,23 @@ the array. Note however that the size of the array is still 0.
 @Returns: the new #GByteArray.
 
 
+<!-- ##### FUNCTION g_byte_array_ref ##### -->
+<para>
+
+</para>
+
+ array: 
+ Returns: 
+
+
+<!-- ##### FUNCTION g_byte_array_unref ##### -->
+<para>
+
+</para>
+
+ array: 
+
+
 <!-- ##### FUNCTION g_byte_array_append ##### -->
 <para>
 Adds the given bytes to the end of the #GByteArray.
@@ -181,7 +198,9 @@ Sets the size of the #GByteArray, expanding it if necessary.
 <!-- ##### FUNCTION g_byte_array_free ##### -->
 <para>
 Frees the memory allocated by the #GByteArray.
-If @free_segment is %TRUE it frees the actual byte data.
+If @free_segment is %TRUE it frees the actual byte data. If the reference
+count of @array is greater than one, the #GByteArray wrapper is preserved but
+the size of @array will be set to zero.
 </para>
 
 @array: a #GByteArray.
diff --git a/docs/reference/glib/tmpl/arrays_pointer.sgml b/docs/reference/glib/tmpl/arrays_pointer.sgml
index 15c5792..47802cc 100644
--- a/docs/reference/glib/tmpl/arrays_pointer.sgml
+++ b/docs/reference/glib/tmpl/arrays_pointer.sgml
@@ -73,7 +73,7 @@ Contains the public fields of a pointer array.
 
 <!-- ##### FUNCTION g_ptr_array_new ##### -->
 <para>
-Creates a new #GPtrArray.
+Creates a new #GPtrArray with a reference count of 1.
 </para>
 
 @Returns: the new #GPtrArray.
@@ -82,15 +82,50 @@ Creates a new #GPtrArray.
 <!-- ##### FUNCTION g_ptr_array_sized_new ##### -->
 <para>
 Creates a new #GPtrArray with @reserved_size pointers
-preallocated. This avoids frequent reallocation, if you are going to
-add many pointers to the array. Note however that the size of the
-array is still 0.
+preallocated and a reference count of 1. This avoids frequent reallocation,
+if you are going to add many pointers to the array. Note however that the size
+of the array is still 0.
 </para>
 
 @reserved_size: number of pointers preallocated.
 @Returns: the new #GPtrArray.
 
 
+<!-- ##### FUNCTION g_ptr_array_new_with_free_func ##### -->
+<para>
+
+</para>
+
+ element_free_func: 
+ Returns: 
+
+
+<!-- ##### FUNCTION g_ptr_array_set_free_func ##### -->
+<para>
+
+</para>
+
+ array: 
+ element_free_func: 
+
+
+<!-- ##### FUNCTION g_ptr_array_ref ##### -->
+<para>
+
+</para>
+
+ array: 
+ Returns: 
+
+
+<!-- ##### FUNCTION g_ptr_array_unref ##### -->
+<para>
+
+</para>
+
+ array: 
+
+
 <!-- ##### FUNCTION g_ptr_array_add ##### -->
 <para>
 Adds a pointer to the end of the pointer array.
@@ -228,14 +263,17 @@ Returns the pointer at the given index of the pointer array.
 <!-- ##### FUNCTION g_ptr_array_free ##### -->
 <para>
 Frees the memory allocated for the #GPtrArray.
-If @free_segment is %TRUE it frees the memory block holding the elements
+If @free_seg is %TRUE it frees the memory block holding the elements
 as well. Pass %FALSE if you want to free the #GPtrArray wrapper but preserve
-the underlying array for use elsewhere.
+the underlying array for use elsewhere. If the reference count of @array
+is greater than one, the #GPtrArray wrapper is preserved but the size of
+ array will be set to zero.
 </para>
 <note>
 <para>
-If array contents point to dynamically-allocated memory, they should be freed
-separately.
+If array contents point to dynamically-allocated memory, they should
+be freed separately if @free_seg is %TRUE and no #GDestroyNotify
+function has been set for @array.
 </para>
 </note>
 
diff --git a/docs/reference/gobject/gobject-sections.txt b/docs/reference/gobject/gobject-sections.txt
index f0307dd..529de30 100644
--- a/docs/reference/gobject/gobject-sections.txt
+++ b/docs/reference/gobject/gobject-sections.txt
@@ -337,6 +337,9 @@ g_pointer_type_register_static
 
 <SUBSECTION>
 G_TYPE_HASH_TABLE
+G_TYPE_ARRAY
+G_TYPE_BYTE_ARRAY
+G_TYPE_PTR_ARRAY
 G_TYPE_DATE
 G_TYPE_GSTRING
 G_TYPE_STRV
diff --git a/glib/garray.c b/glib/garray.c
index b05ded6..d4322bc 100644
--- a/glib/garray.c
+++ b/glib/garray.c
@@ -55,6 +55,7 @@ struct _GRealArray
   guint   elt_size;
   guint   zero_terminated : 1;
   guint   clear : 1;
+  volatile gint ref_count;
 };
 
 #define g_array_elt_len(array,i) ((array)->elt_size * (i))
@@ -91,6 +92,7 @@ GArray* g_array_sized_new (gboolean zero_terminated,
   array->zero_terminated = (zero_terminated ? 1 : 0);
   array->clear           = (clear ? 1 : 0);
   array->elt_size        = elt_size;
+  array->ref_count       = 1;
 
   if (array->zero_terminated || reserved_size != 0)
     {
@@ -101,14 +103,81 @@ GArray* g_array_sized_new (gboolean zero_terminated,
   return (GArray*) array;
 }
 
+/**
+ * g_array_ref:
+ * @array: A #GArray.
+ *
+ * Atomically increments the reference count of @array by one. This
+ * function is MT-safe and may be called from any thread.
+ *
+ * Returns: The passed in #GArray.
+ *
+ * Since: 2.22
+ **/
+GArray *
+g_array_ref (GArray *farray)
+{
+  GRealArray *array = (GRealArray*) farray;
+  g_return_val_if_fail (g_atomic_int_get (&array->ref_count) > 0, farray);
+  g_atomic_int_inc (&array->ref_count);
+  return farray;
+}
+
+/**
+ * g_array_unref:
+ * @array: A #GArray.
+ *
+ * Atomically decrements the reference count of @array by one. If the
+ * reference count drops to 0, all memory allocated by the array is
+ * released. This function is MT-safe and may be called from any
+ * thread.
+ *
+ * Since: 2.22
+ **/
+void
+g_array_unref (GArray *farray)
+{
+  GRealArray *array = (GRealArray*) farray;
+  g_return_if_fail (g_atomic_int_get (&array->ref_count) > 0);
+  if (g_atomic_int_dec_and_test (&array->ref_count))
+    {
+      g_atomic_int_inc (&array->ref_count);
+      g_array_free (farray, TRUE);
+    }
+}
+
+/**
+ * g_array_get_element_size:
+ * @array: A #GArray.
+ *
+ * Gets the size of the elements in @array.
+ *
+ * Returns: Size of each element, in bytes.
+ *
+ * Since: 2.22
+ **/
+guint
+g_array_get_element_size (GArray *farray)
+{
+  GRealArray *array = (GRealArray*) farray;
+  return array->elt_size;
+}
+
 gchar*
-g_array_free (GArray   *array,
+g_array_free (GArray   *farray,
 	      gboolean  free_segment)
 {
+  GRealArray *array = (GRealArray*) farray;
   gchar* segment;
+  gboolean preserve_wrapper;
 
   g_return_val_if_fail (array, NULL);
 
+  /* if others are holding a reference, preserve the wrapper but do free/return the data */
+  preserve_wrapper = FALSE;
+  if (g_atomic_int_get (&array->ref_count) > 1)
+    preserve_wrapper = TRUE;
+
   if (free_segment)
     {
       g_free (array->data);
@@ -117,7 +186,16 @@ g_array_free (GArray   *array,
   else
     segment = array->data;
 
-  g_slice_free1 (sizeof (GRealArray), array);
+  if (preserve_wrapper)
+    {
+      array->data            = NULL;
+      array->len             = 0;
+      array->alloc           = 0;
+    }
+  else
+    {
+      g_slice_free1 (sizeof (GRealArray), array);
+    }
 
   return segment;
 }
@@ -352,9 +430,11 @@ typedef struct _GRealPtrArray  GRealPtrArray;
 
 struct _GRealPtrArray
 {
-  gpointer *pdata;
-  guint     len;
-  guint     alloc;
+  gpointer     *pdata;
+  guint         len;
+  guint         alloc;
+  volatile gint ref_count;
+  GDestroyNotify element_free_func;
 };
 
 static void g_ptr_array_maybe_expand (GRealPtrArray *array,
@@ -374,6 +454,8 @@ g_ptr_array_sized_new (guint reserved_size)
   array->pdata = NULL;
   array->len = 0;
   array->alloc = 0;
+  array->ref_count = 1;
+  array->element_free_func = NULL;
 
   if (reserved_size != 0)
     g_ptr_array_maybe_expand (array, reserved_size);
@@ -381,23 +463,126 @@ g_ptr_array_sized_new (guint reserved_size)
   return (GPtrArray*) array;  
 }
 
+/**
+ * g_ptr_array_new_with_free_func:
+ * @element_free_func: A function to free elements with destroy @array or %NULL.
+ *
+ * Creates a new #GPtrArray with a reference count of 1 and use @element_free_func
+ * for freeing each element when the array is destroyed either via
+ * g_ptr_array_unref() or when g_ptr_array_free() is called with @free_segment
+ * set to %TRUE.
+ *
+ * Returns: A new #GPtrArray.
+ *
+ * Since: 2.22
+ **/
+GPtrArray *
+g_ptr_array_new_with_free_func (GDestroyNotify element_free_func)
+{
+  GPtrArray *array;
+
+  array = g_ptr_array_new ();
+  g_ptr_array_set_free_func (array, element_free_func);
+  return array;
+}
+
+/**
+ * g_ptr_array_set_free_func:
+ * @array: A #GPtrArray.
+ * @element_free_func: A function to free elements with destroy @array or %NULL.
+ *
+ * Sets a function for freeing each element when @array is destroyed
+ * either via g_ptr_array_unref() or when g_ptr_array_free() is called
+ * with @free_segment set to %TRUE.
+ *
+ * Since: 2.22
+ **/
+void
+g_ptr_array_set_free_func (GPtrArray        *farray,
+                           GDestroyNotify    element_free_func)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+  array->element_free_func = element_free_func;
+}
+
+/**
+ * g_ptr_array_ref:
+ * @array: A #GArray.
+ *
+ * Atomically increments the reference count of @array by one. This
+ * function is MT-safe and may be called from any thread.
+ *
+ * Returns: The passed in #GPtrArray.
+ *
+ * Since: 2.22
+ **/
+GPtrArray *
+g_ptr_array_ref (GPtrArray *farray)
+{
+  GRealPtrArray *array = (GRealPtrArray*) farray;
+  g_return_val_if_fail (g_atomic_int_get (&array->ref_count) > 0, farray);
+  g_atomic_int_inc (&array->ref_count);
+  return farray;
+}
+
+/**
+ * g_ptr_array_unref:
+ * @array: A #GArray.
+ *
+ * Atomically decrements the reference count of @array by one. If the
+ * reference count drops to 0, the effect is the same as calling
+ * g_ptr_array_free() with @free_segment set to %TRUE. This function
+ * is MT-safe and may be called from any thread.
+ *
+ * Since: 2.22
+ **/
+void
+g_ptr_array_unref (GPtrArray *farray)
+{
+  GRealPtrArray *array = (GRealPtrArray*) farray;
+  g_return_if_fail (g_atomic_int_get (&array->ref_count) > 0);
+  if (g_atomic_int_dec_and_test (&array->ref_count))
+    {
+      g_atomic_int_inc (&array->ref_count);
+      g_ptr_array_free (farray, TRUE);
+    }
+}
+
 gpointer*
-g_ptr_array_free (GPtrArray *array,
+g_ptr_array_free (GPtrArray *farray,
 		  gboolean   free_segment)
 {
+  GRealPtrArray *array = (GRealPtrArray*) farray;
   gpointer* segment;
+  gboolean preserve_wrapper;
 
   g_return_val_if_fail (array, NULL);
 
+  /* if others are holding a reference, preserve the wrapper but do free/return the data */
+  preserve_wrapper = FALSE;
+  if (g_atomic_int_get (&array->ref_count) > 1)
+    preserve_wrapper = TRUE;
+
   if (free_segment)
     {
+      if (array->element_free_func != NULL)
+        g_ptr_array_foreach (farray, (GFunc) array->element_free_func, NULL);
       g_free (array->pdata);
       segment = NULL;
     }
   else
     segment = array->pdata;
 
-  g_slice_free1 (sizeof (GRealPtrArray), array);
+  if (preserve_wrapper)
+    {
+      array->pdata = NULL;
+      array->len = 0;
+      array->alloc = 0;
+    }
+  else
+    {
+      g_slice_free1 (sizeof (GRealPtrArray), array);
+    }
 
   return segment;
 }
@@ -646,6 +831,40 @@ guint8*	    g_byte_array_free     (GByteArray *array,
   return (guint8*) g_array_free ((GArray*) array, free_segment);
 }
 
+/**
+ * g_byte_array_ref:
+ * @array: A #GByteArray.
+ *
+ * Atomically increments the reference count of @array by one. This
+ * function is MT-safe and may be called from any thread.
+ *
+ * Returns: The passed in #GByteArray.
+ *
+ * Since: 2.22
+ **/
+GByteArray *
+g_byte_array_ref (GByteArray *array)
+{
+  return (GByteArray *) g_array_ref ((GArray *) array);
+}
+
+/**
+ * g_byte_array_unref:
+ * @array: A #GArray.
+ *
+ * Atomically decrements the reference count of @array by one. If the
+ * reference count drops to 0, all memory allocated by the array is
+ * released. This function is MT-safe and may be called from any
+ * thread.
+ *
+ * Since: 2.22
+ **/
+void
+g_byte_array_unref (GByteArray *array)
+{
+  g_array_unref ((GArray *) array);
+}
+
 GByteArray* g_byte_array_append   (GByteArray   *array,
 				   const guint8 *data,
 				   guint         len)
diff --git a/glib/garray.h b/glib/garray.h
index db00137..6bc51f7 100644
--- a/glib/garray.h
+++ b/glib/garray.h
@@ -76,6 +76,9 @@ GArray* g_array_sized_new         (gboolean          zero_terminated,
 				   guint             reserved_size);
 gchar*  g_array_free              (GArray           *array,
 				   gboolean          free_segment);
+GArray *g_array_ref               (GArray           *array);
+void    g_array_unref             (GArray           *array);
+guint   g_array_get_element_size  (GArray           *array);
 GArray* g_array_append_vals       (GArray           *array,
 				   gconstpointer     data,
 				   guint             len);
@@ -107,9 +110,14 @@ void    g_array_sort_with_data    (GArray           *array,
  */
 #define    g_ptr_array_index(array,index_) ((array)->pdata)[index_]
 GPtrArray* g_ptr_array_new                (void);
+GPtrArray* g_ptr_array_new_with_free_func (GDestroyNotify    element_free_func);
 GPtrArray* g_ptr_array_sized_new          (guint             reserved_size);
 gpointer*  g_ptr_array_free               (GPtrArray        *array,
 					   gboolean          free_seg);
+GPtrArray* g_ptr_array_ref                (GPtrArray        *array);
+void       g_ptr_array_unref              (GPtrArray        *array);
+void       g_ptr_array_set_free_func      (GPtrArray        *array,
+                                           GDestroyNotify    element_free_func);
 void       g_ptr_array_set_size           (GPtrArray        *array,
 					   gint              length);
 gpointer   g_ptr_array_remove_index       (GPtrArray        *array,
@@ -143,6 +151,8 @@ GByteArray* g_byte_array_new               (void);
 GByteArray* g_byte_array_sized_new         (guint             reserved_size);
 guint8*     g_byte_array_free              (GByteArray       *array,
 					    gboolean          free_segment);
+GByteArray *g_byte_array_ref               (GByteArray       *array);
+void        g_byte_array_unref             (GByteArray       *array);
 GByteArray* g_byte_array_append            (GByteArray       *array,
 					    const guint8     *data,
 					    guint             len);
diff --git a/glib/glib.symbols b/glib/glib.symbols
index a8b7b44..441c812 100644
--- a/glib/glib.symbols
+++ b/glib/glib.symbols
@@ -17,6 +17,9 @@ g_array_append_vals
 g_array_free
 g_array_insert_vals
 g_array_new
+g_array_ref
+g_array_unref
+g_array_get_element_size
 g_array_prepend_vals
 g_array_remove_index
 g_array_remove_index_fast
@@ -27,6 +30,8 @@ g_array_sort
 g_array_sort_with_data
 g_byte_array_append
 g_byte_array_free
+g_byte_array_unref
+g_byte_array_ref
 g_byte_array_new
 g_byte_array_prepend
 g_byte_array_remove_index
@@ -39,7 +44,11 @@ g_byte_array_sort_with_data
 g_ptr_array_add
 g_ptr_array_foreach
 g_ptr_array_free
+g_ptr_array_unref
+g_ptr_array_ref
 g_ptr_array_new
+g_ptr_array_new_with_free_func
+g_ptr_array_set_free_func
 g_ptr_array_remove
 g_ptr_array_remove_fast
 g_ptr_array_remove_index
diff --git a/gobject/gboxed.c b/gobject/gboxed.c
index 8cdcd1e..e3a6170 100644
--- a/gobject/gboxed.c
+++ b/gobject/gboxed.c
@@ -274,6 +274,39 @@ g_regex_get_type (void)
   return type_id;
 }
 
+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;
+}
+
+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;
+}
+
+GType
+g_byte_array_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 void
 boxed_proxy_value_init (GValue *value)
 {
diff --git a/gobject/gboxed.h b/gobject/gboxed.h
index 75a5193..82e2722 100644
--- a/gobject/gboxed.h
+++ b/gobject/gboxed.h
@@ -162,6 +162,30 @@ GType	g_boxed_type_register_static		(const gchar	*name,
  * Since: 2.14
  */
 #define	G_TYPE_REGEX (g_regex_get_type ())
+/**
+ * G_TYPE_ARRAY:
+ *
+ * The #GType for a boxed type holding a #GArray reference.
+ *
+ * Since: 2.22
+ */
+#define	G_TYPE_ARRAY (g_array_get_type ())
+/**
+ * G_TYPE_BYTE_ARRAY:
+ *
+ * The #GType for a boxed type holding a #GByteArray reference.
+ *
+ * Since: 2.22
+ */
+#define	G_TYPE_BYTE_ARRAY (g_byte_array_get_type ())
+/**
+ * G_TYPE_PTR_ARRAY:
+ *
+ * The #GType for a boxed type holding a #GPtrArray reference.
+ *
+ * Since: 2.22
+ */
+#define	G_TYPE_PTR_ARRAY (g_ptr_array_get_type ())
 
 
 void    g_value_take_boxed      (GValue		*value,
@@ -177,6 +201,9 @@ GType	g_date_get_type	        (void)	G_GNUC_CONST;
 GType	g_strv_get_type	        (void)	G_GNUC_CONST;
 GType	g_gstring_get_type      (void)	G_GNUC_CONST;
 GType   g_hash_table_get_type   (void)  G_GNUC_CONST;
+GType   g_array_get_type        (void)  G_GNUC_CONST;
+GType   g_byte_array_get_type   (void)  G_GNUC_CONST;
+GType   g_ptr_array_get_type    (void)  G_GNUC_CONST;
 GType   g_regex_get_type        (void)  G_GNUC_CONST;
 
 /**
diff --git a/gobject/gobject.symbols b/gobject/gobject.symbols
index 7a98dc3..a43dd08 100644
--- a/gobject/gobject.symbols
+++ b/gobject/gobject.symbols
@@ -20,6 +20,9 @@ g_date_get_type G_GNUC_CONST
 g_gstring_get_type G_GNUC_CONST
 g_strv_get_type G_GNUC_CONST
 g_hash_table_get_type G_GNUC_CONST
+g_array_get_type G_GNUC_CONST
+g_byte_array_get_type G_GNUC_CONST
+g_ptr_array_get_type G_GNUC_CONST
 g_regex_get_type G_GNUC_CONST
 g_closure_get_type G_GNUC_CONST
 g_value_get_type G_GNUC_CONST



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