void g_ptr_array_set_size (GPtrArray *farray, gint length) { GRealPtrArray* array = (GRealPtrArray*) farray; g_return_if_fail (array); if (length > array->len) { int i; g_ptr_array_maybe_expand (array, (length - array->len)); /* This is not * memset (array->pdata + array->len, 0, * sizeof (gpointer) * (length - array->len)); * to make it really portable. Remember (void*)NULL needn't be * bitwise zero. It of course is silly not to use memset (..,0,..). */ for (i = array->len; i < length; i++) array->pdata[i] = NULL; } if (G_UNLIKELY (g_mem_gc_friendly) && length < array->len) { int i; for (i = length; i < array->len; i++) array->pdata[i] = NULL; } array->len = length; }
/** * g_ptr_array_set_size: * @array: a #GPtrArray * @length: the new length of the pointer array * * Sets the size of the array. When making the array larger, * newly-added elements will be set to %NULL. When making it smaller, * if @array has a non-%NULL #GDestroyNotify function then it will be * called for the removed elements. */ void g_ptr_array_set_size (GPtrArray *array, gint length) { GRealPtrArray *rarray = (GRealPtrArray *)array; g_return_if_fail (rarray); if (length > rarray->len) { int i; g_ptr_array_maybe_expand (rarray, (length - rarray->len)); /* This is not * memset (array->pdata + array->len, 0, * sizeof (gpointer) * (length - array->len)); * to make it really portable. Remember (void*)NULL needn't be * bitwise zero. It of course is silly not to use memset (..,0,..). */ for (i = rarray->len; i < length; i++) rarray->pdata[i] = NULL; } else if (length < rarray->len) g_ptr_array_remove_range (array, length, rarray->len - length); rarray->len = length; }
/** * g_ptr_array_add: * @array: a #GPtrArray * @data: the pointer to add * * Adds a pointer to the end of the pointer array. The array will grow * in size automatically if necessary. */ void g_ptr_array_add (GPtrArray *array, gpointer data) { GRealPtrArray *rarray = (GRealPtrArray *)array; g_return_if_fail (rarray); g_ptr_array_maybe_expand (rarray, 1); rarray->pdata[rarray->len++] = data; }
EXPORT_C void g_ptr_array_add (GPtrArray *farray, gpointer data) { GRealPtrArray* array = (GRealPtrArray*) farray; g_return_if_fail (array); g_ptr_array_maybe_expand (array, 1); array->pdata[array->len++] = data; }
void g_ptr_array_set_size (GPtrArray *farray, gint length) { GRealPtrArray* array = (GRealPtrArray*) farray; g_return_if_fail (array); if (length > array->len) g_ptr_array_maybe_expand (array, (length - array->len)); array->len = length; }
GPtrArray* g_ptr_array_sized_new (guint reserved_size) { GRealPtrArray *array = g_slice_new (GRealPtrArray); array->pdata = NULL; array->len = 0; array->alloc = 0; if (reserved_size != 0) g_ptr_array_maybe_expand (array, reserved_size); return (GPtrArray*) array; }
/** * g_ptr_array_sized_new: * @reserved_size: number of pointers preallocated * * 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. * * Returns: the new #GPtrArray */ GPtrArray* g_ptr_array_sized_new (guint reserved_size) { GRealPtrArray *array; array = g_slice_new (GRealPtrArray); #ifdef GSTREAMER_LITE if (array == NULL) { return NULL; } #endif // GSTREAMER_LITE 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); return (GPtrArray*) array; }
GPtrArray* g_ptr_array_sized_new (guint reserved_size) { GRealPtrArray *array; G_LOCK (ptr_array_mem_chunk); if (!ptr_array_mem_chunk) ptr_array_mem_chunk = g_mem_chunk_new ("array mem chunk", sizeof (GRealPtrArray), 1024, G_ALLOC_AND_FREE); array = g_chunk_new (GRealPtrArray, ptr_array_mem_chunk); G_UNLOCK (ptr_array_mem_chunk); array->pdata = NULL; array->len = 0; array->alloc = 0; if (reserved_size != 0) g_ptr_array_maybe_expand (array, reserved_size); return (GPtrArray*) array; }
/** * 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 *array, gint index_, gpointer data) { GRealPtrArray *rarray = (GRealPtrArray *)array; g_return_if_fail (rarray); g_return_if_fail (index_ >= -1); g_return_if_fail (index_ <= (gint)rarray->len); g_ptr_array_maybe_expand (rarray, 1); if (index_ < 0) index_ = rarray->len; if (index_ < rarray->len) memmove (&(rarray->pdata[index_ + 1]), &(rarray->pdata[index_]), (rarray->len - index_) * sizeof (gpointer)); rarray->len++; rarray->pdata[index_] = data; }