<!-- ##### SECTION Title ##### -->
Value arrays

<!-- ##### SECTION Short_Description ##### -->
A container structure to maintain an array of generic values

<!-- ##### SECTION Long_Description ##### -->
<para>
The prime purpose of a #GValueArray is for it to be used as an object property
that holds an array of values. A #GValueArray wraps an array of #GValue elements
in order for it to be used as a boxed type through %G_TYPE_VALUE_ARRAY.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
#GValue, #GParamSpecValueArray, g_param_spec_value_array()
</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GValueArray ##### -->
<para>
A #GValueArray contains an array of #GValue elements.
</para>

@n_values:     number of values contained in the array
@values:       array of values

<!-- ##### FUNCTION g_value_array_get_nth ##### -->
<para>
Return a pointer to the value at @index_ containd in @value_array.
</para>

@value_array: #GValueArray to get a value from
@index_:      index of the value of interest
@Returns:     pointer to a value at @index_ in @value_array


<!-- ##### FUNCTION g_value_array_new ##### -->
<para>
Allocate and initialize a new #GValueArray, optionally preserve space
for @n_prealloced elements. New arrays always contain 0 elements,
regardless of the value of @n_prealloced.
</para>

@n_prealloced: number of values to preallocate space for
@Returns:      a newly allocated #GValueArray with 0 values


<!-- ##### FUNCTION g_value_array_copy ##### -->
<para>
Construct an exact copy of a #GValueArray by duplicating all its
contents.
</para>

@value_array: #GValueArray to copy
@Returns:     Newly allocated copy of #GValueArray


<!-- ##### FUNCTION g_value_array_free ##### -->
<para>
Free a #GValueArray including its contents.
</para>

@value_array: #GValueArray to free


<!-- ##### FUNCTION g_value_array_append ##### -->
<para>
Insert a copy of @value as last element of @value_array.
</para>

@value_array: #GValueArray to add an element to
@value:       #GValue to copy into #GValueArray
@Returns:     the #GValueArray passed in as @value_array


<!-- ##### FUNCTION g_value_array_prepend ##### -->
<para>
Insert a copy of @value as first element of @value_array.
</para>

@value_array: #GValueArray to add an element to
@value:       #GValue to copy into #GValueArray
@Returns:     the #GValueArray passed in as @value_array


<!-- ##### FUNCTION g_value_array_insert ##### -->
<para>
Insert a copy of @value at specified position into @value_array.
</para>

@value_array: #GValueArray to add an element to
@index_:      insertion position, must be &lt;= value_array-&gt;n_values
@value:       #GValue to copy into #GValueArray
@Returns:     the #GValueArray passed in as @value_array


<!-- ##### FUNCTION g_value_array_remove ##### -->
<para>
Remove the value at position @index_ from @value_array.
</para>

@value_array: #GValueArray to remove an element from
@index_:      position of value to remove, must be &lt; value_array->n_values
@Returns:     the #GValueArray passed in as @value_array


<!-- ##### FUNCTION g_value_array_sort ##### -->
<para>
Sort @value_array using @compare_func to compare the elements accoring to
the semantics of #GCompareFunc.
</para>

<para>
The current implementation uses Quick-Sort as sorting algorithm.
</para>

@value_array:  #GValueArray to sort
@compare_func: function to compare elements
@Returns:      the #GValueArray passed in as @value_array


<!-- ##### FUNCTION g_value_array_sort_with_data ##### -->
<para>
Sort @value_array using @compare_func to compare the elements accoring
to the semantics of #GCompareDataFunc.
</para>

<para>
The current implementation uses Quick-Sort as sorting algorithm.
</para>

@value_array:   #GValueArray to sort
@compare_func:  function to compare elements
@user_data:     extra data argument provided for @compare_func
@Returns:       the #GValueArray passed in as @value_array


