Add g_ptr_array_new_full

Fixes bug #654450
This commit is contained in:
Xavier Claessens 2011-07-14 10:51:06 +02:00
parent 7df304a2d8
commit eec69a75ee
3 changed files with 31 additions and 0 deletions

View File

@ -2380,6 +2380,7 @@ GPtrArray
g_ptr_array_new
g_ptr_array_sized_new
g_ptr_array_new_with_free_func
g_ptr_array_new_full
g_ptr_array_set_free_func
g_ptr_array_ref
g_ptr_array_unref

View File

@ -836,6 +836,34 @@ g_ptr_array_new_with_free_func (GDestroyNotify element_free_func)
return array;
}
/**
* g_ptr_array_new_full:
* @reserved_size: number of pointers preallocated.
* @element_free_func: A function to free elements with destroy @array or %NULL.
*
* Creates a new #GPtrArray with @reserved_size pointers 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. It also set @element_free_func
* for freeing each element when the array is destroyed either via
* g_ptr_array_unref(), when g_ptr_array_free() is called with @free_segment
* set to %TRUE or when removing elements.
*
* Returns: A new #GPtrArray.
*
* Since: 2.30
**/
GPtrArray *
g_ptr_array_new_full (guint reserved_size,
GDestroyNotify element_free_func)
{
GPtrArray *array;
array = g_ptr_array_sized_new (reserved_size);
g_ptr_array_set_free_func (array, element_free_func);
return array;
}
/**
* g_ptr_array_set_free_func:
* @array: A #GPtrArray.

View File

@ -112,6 +112,8 @@ void g_array_sort_with_data (GArray *array,
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);
GPtrArray* g_ptr_array_new_full (guint reserved_size,
GDestroyNotify element_free_func);
gpointer* g_ptr_array_free (GPtrArray *array,
gboolean free_seg);
GPtrArray* g_ptr_array_ref (GPtrArray *array);