GPtrArray: Added g_ptr_array_insert()

Speaks for itself, I've found myself on numerous occasions
writing my own version of this, or using a GArray of pointers.

https://bugzilla.gnome.org/show_bug.cgi?id=719395
This commit is contained in:
Tristan Van Berkom 2013-11-27 14:34:20 +09:00 committed by Matthias Clasen
parent 6011d0a4ae
commit 9ed0d0c509
2 changed files with 40 additions and 0 deletions

View File

@ -1382,6 +1382,42 @@ g_ptr_array_add (GPtrArray *farray,
array->pdata[array->len++] = data; array->pdata[array->len++] = data;
} }
/**
* g_ptr_array_insert:
* @array: a #GPtrArray.
* @index_: the index to place the new element at, or -1 to append.
* @data: the pointer to add.
*
* Inserts an element into the pointer array at the given index. The
* array will grow in size automatically if necessary.
*
* Since: 2.40
**/
void
g_ptr_array_insert (GPtrArray *farray,
gint index_,
gpointer data)
{
GRealPtrArray* array = (GRealPtrArray*) farray;
g_return_if_fail (array);
g_return_if_fail (index_ >= -1);
g_return_if_fail (index_ <= (gint)array->len);
g_ptr_array_maybe_expand (array, 1);
if (index_ < 0)
index_ = array->len;
if (index_ < array->len)
memmove (&(array->pdata[index_ + 1]),
&(array->pdata[index_]),
(array->len - index_) * sizeof (gpointer));
array->len++;
array->pdata[index_] = data;
}
/** /**
* g_ptr_array_sort: * g_ptr_array_sort:
* @array: a #GPtrArray. * @array: a #GPtrArray.

View File

@ -169,6 +169,10 @@ GPtrArray *g_ptr_array_remove_range (GPtrArray *array,
GLIB_AVAILABLE_IN_ALL GLIB_AVAILABLE_IN_ALL
void g_ptr_array_add (GPtrArray *array, void g_ptr_array_add (GPtrArray *array,
gpointer data); gpointer data);
GLIB_AVAILABLE_IN_2_40
void g_ptr_array_insert (GPtrArray *farray,
gint index_,
gpointer data);
GLIB_AVAILABLE_IN_ALL GLIB_AVAILABLE_IN_ALL
void g_ptr_array_sort (GPtrArray *array, void g_ptr_array_sort (GPtrArray *array,
GCompareFunc compare_func); GCompareFunc compare_func);