mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-27 07:56:14 +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;
|
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.
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user