mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
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:
parent
6011d0a4ae
commit
9ed0d0c509
@ -1382,6 +1382,42 @@ g_ptr_array_add (GPtrArray *farray,
|
||||
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:
|
||||
* @array: a #GPtrArray.
|
||||
|
@ -169,6 +169,10 @@ GPtrArray *g_ptr_array_remove_range (GPtrArray *array,
|
||||
GLIB_AVAILABLE_IN_ALL
|
||||
void g_ptr_array_add (GPtrArray *array,
|
||||
gpointer data);
|
||||
GLIB_AVAILABLE_IN_2_40
|
||||
void g_ptr_array_insert (GPtrArray *farray,
|
||||
gint index_,
|
||||
gpointer data);
|
||||
GLIB_AVAILABLE_IN_ALL
|
||||
void g_ptr_array_sort (GPtrArray *array,
|
||||
GCompareFunc compare_func);
|
||||
|
Loading…
Reference in New Issue
Block a user