<!-- ##### 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: 


<!-- ##### 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


