<!-- ##### SECTION Title ##### -->
Singly-Linked Lists

<!-- ##### SECTION Short_Description ##### -->
linked lists containing integer values or pointers to data, limited to
iterating over the list in one direction.

<!-- ##### SECTION Long_Description ##### -->
<para>
The #GSList structure and its associated functions provide a standard
singly-linked list data structure.
</para>
<para>
Each element in the list contains a piece of data, together with a pointer
which links to the next element in the list.
Using this pointer it is possible to move through the list in one
direction only (unlike the
<link linkend="glib-Doubly-Linked-lists">Doubly-Linked Lists</link>
which allow movement in both directions).
</para>
<para>
The data contained in each element can be either integer values, by using one
of the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
or simply pointers to any type of data.
</para>
<para>
List elements are allocated from the <link linkend="glib-Memory-Slices">slice
allocator</link>, which is more efficient than allocating elements 
individually.
</para>
<para>
Note that most of the #GSList functions expect to be passed a pointer to
the first element in the list. The functions which insert elements return
the new start of the list, which may have changed.
</para>
<para>
There is no function to create a #GSList. %NULL is considered to be the empty
list so you simply set a #GSList* to %NULL.
</para>
<para>
To add elements, use g_slist_append(), g_slist_prepend(), g_slist_insert()
and g_slist_insert_sorted().
</para>
<para>
To remove elements, use g_slist_remove().
</para>
<para>
To find elements in the list use g_slist_last(), g_slist_next(),
g_slist_nth(), g_slist_nth_data(), g_slist_find() and
g_slist_find_custom().
</para>
<para>
To find the index of an element use g_slist_position() and g_slist_index().
</para>
<para>
To call a function for each element in the list use g_slist_foreach().
</para>
<para>
To free the entire list, use g_slist_free().
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

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


<!-- ##### STRUCT GSList ##### -->
<para>
The #GSList struct is used for each element in the singly-linked list.
</para>

@data: holds the element's data, which can be a pointer to any kind of data, 
  or any integer value using the 
  <link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.
@next: contains the link to the next element in the list.

<!-- ##### FUNCTION g_slist_alloc ##### -->
<para>
Allocates space for one #GSList element.
It is called by the g_slist_append(), g_slist_prepend(), g_slist_insert() and
g_slist_insert_sorted() functions and so is rarely used on its own.
</para>

@Returns: a pointer to the newly-allocated #GSList element.


<!-- ##### FUNCTION g_slist_append ##### -->
<para>
Adds a new element on to the end of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<note>
<para>
Note that g_slist_append() has to traverse the entire list to find the end,
which is inefficient when adding multiple elements. A common idiom to
avoid the inefficiency is to prepend the elements and reverse the list 
when all elements have been added. 
</para>
</note>
<informalexample><programlisting>
  /* Notice that these are initialized to the empty list. */
  GSList *list = NULL, *number_list = NULL;

  /* This is a list of strings. */
  list = g_slist_append (list, "first");
  list = g_slist_append (list, "second");

  /* This is a list of integers. */
  number_list = g_slist_append (number_list, GINT_TO_POINTER (27));
  number_list = g_slist_append (number_list, GINT_TO_POINTER (14));
</programlisting></informalexample>

@list: a #GSList.
@data: the data for the new element.
@Returns: the new start of the #GSList.


<!-- ##### FUNCTION g_slist_prepend ##### -->
<para>
Adds a new element on to the start of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<informalexample><programlisting>
  /* Notice that it is initialized to the empty list. */
  GSList *list = NULL;
  list = g_slist_prepend (list, "last");
  list = g_slist_prepend (list, "first");
</programlisting></informalexample>

@list: a #GSList.
@data: the data for the new element.
@Returns: the new start of the #GSList.


<!-- ##### FUNCTION g_slist_insert ##### -->
<para>
Inserts a new element into the list at the given position.
</para>

@list: a #GSList.
@data: the data for the new element.
@position: the position to insert the element. If this is negative, or is
larger than the number of elements in the list, the new element is added on
to the end of the list.
@Returns: the new start of the #GSList.


<!-- ##### FUNCTION g_slist_insert_before ##### -->
<para>
Inserts a node before @sibling containing @data. Returns the new head of the list.
</para>

@slist: a #GSList.
@sibling: node to insert @data before.
@data: data to put in the newly-inserted node.
@Returns: new head of the list.


<!-- ##### FUNCTION g_slist_insert_sorted ##### -->
<para>
Inserts a new element into the list, using the given comparison function
to determine its position.
</para>

@list: a #GSList.
@data: the data for the new element.
@func: the function to compare elements in the list. It should return a
number > 0 if the first parameter comes after the second parameter in
the sort order.
@Returns: the new start of the #GSList.


<!-- ##### FUNCTION g_slist_remove ##### -->
<para>
Removes an element from a #GSList.
If two elements contain the same data, only the first is removed.
If none of the elements contain the data, the #GSList is unchanged.
</para>

@list: a #GSList.
@data: the data of the element to remove.
@Returns: the new start of the #GSList.


<!-- ##### FUNCTION g_slist_remove_link ##### -->
<para>
Removes an element from a #GSList, without freeing the element.
The removed element's next link is set to %NULL, so that it becomes a
self-contained list with one element.
</para>

@list: a #GSList.
@link_: an element in the #GSList.
@Returns: the new start of the #GSList, without the element.


<!-- ##### FUNCTION g_slist_delete_link ##### -->
<para>
Deletes a node of @list. Returns the new list head.
</para>

@list: a #GSList.
@link_: node to delete.
@Returns: new head of @list.


<!-- ##### FUNCTION g_slist_remove_all ##### -->
<para>
Removes all list nodes with data equal to @data. Returns the new
head of the list. Contrast with g_slist_remove() which removes only 
the first node matching the given data.
</para>

@list: a #GSList.
@data: data to remove.
@Returns: new head of @list.


<!-- ##### FUNCTION g_slist_free ##### -->
<para>
Frees all of the memory used by a #GSList.
The freed elements are returned to the slice allocator.
</para>

@list: a #GSList.


<!-- ##### FUNCTION g_slist_free_1 ##### -->
<para>
Frees one #GSList element.
It is usually used after g_slist_remove_link().
</para>

@list: a #GSList element.


<!-- ##### MACRO g_slist_free1 ##### -->
<para>
A macro which does the same as g_slist_free_1().
</para>

@Since: 2.10


<!-- ##### FUNCTION g_slist_length ##### -->
<para>
Gets the number of elements in a #GSList.
</para>

@list: a #GSList.
@Returns: the number of elements in the #GSList.


<!-- ##### FUNCTION g_slist_copy ##### -->
<para>
Copies a #GSList.
</para>
<para>
Note that this is a "shallow" copy. If the list elements consist of pointers
to data, the pointers are copied but the actual data isn't.
</para>

@list: a #GSList.
@Returns: a copy of @list.


<!-- ##### FUNCTION g_slist_reverse ##### -->
<para>
Reverses a #GSList.
</para>

@list: a #GSList.
@Returns: the start of the reversed #GSList.


<!-- ##### FUNCTION g_slist_insert_sorted_with_data ##### -->
<para>
Inserts a new element into the list, using the given comparison function
to determine its position.
</para>

@list: a #GSList.
@data: the data for the new element.
@func: the function to compare elements in the list. It should return a
number > 0 if the first parameter comes after the second parameter in
the sort order.
@user_data: data to pass to comparison function.
@Returns: the new start of the #GSList.
@Since 2.10


<!-- ##### FUNCTION g_slist_sort ##### -->
<para>
Sorts a #GSList using the given comparison function.
</para>

@list: a #GSList.
@compare_func: the comparison function used to sort the #GSList. 
This function is passed the data from 2 elements of the #GSList and should 
return 0 if they are equal, a negative value if the first element 
comes before the second, or a positive value if the first element 
comes after the second.
@Returns: the start of the sorted #GSList.


<!-- ##### FUNCTION g_slist_sort_with_data ##### -->
<para>
Like g_slist_sort(), but the sort function accepts a user data argument.
</para>

@list: a #GSList
@compare_func: comparison function.
@user_data: data to pass to comparison function.
@Returns: new head of the list.


<!-- ##### FUNCTION g_slist_concat ##### -->
<para>
Adds the second #GSList onto the end of the first #GSList.
Note that the elements of the second #GSList are not copied.
They are used directly.
</para>

@list1: a #GSList.
@list2: the #GSList to add to the end of the first #GSList.
@Returns: the start of the new #GSList.


<!-- ##### FUNCTION g_slist_foreach ##### -->
<para>
Calls a function for each element of a #GSList.
</para>

@list: a #GSList.
@func: the function to call with each element's data.
@user_data: user data to pass to the function.


<!-- ##### FUNCTION g_slist_last ##### -->
<para>
Gets the last element in a #GSList.
</para>

@list: a #GSList.
@Returns: the last element in the #GSList, or %NULL if the #GSList has no
elements.


<!-- ##### MACRO g_slist_next ##### -->
<para>
A convenience macro to gets the next element in a #GSList.
</para>

@slist: an element in a #GSList.
@Returns: the next element, or %NULL if there are no more elements.


<!-- ##### FUNCTION g_slist_nth ##### -->
<para>
Gets the element at the given position in a #GSList.
</para>

@list: a #GSList.
@n: the position of the element, counting from 0.
@Returns: the element, or %NULL if the position is off the end of the #GSList.


<!-- ##### FUNCTION g_slist_nth_data ##### -->
<para>
Gets the data of the element at the given position.
</para>

@list: a #GSList.
@n: the position of the element.
@Returns: the element's data, or %NULL if the position is off the end of the
#GSList.


<!-- ##### FUNCTION g_slist_find ##### -->
<para>
Finds the element in a #GSList which contains the given data.
</para>

@list: a #GSList.
@data: the element data to find.
@Returns: the found #GSList element, or %NULL if it is not found.


<!-- ##### FUNCTION g_slist_find_custom ##### -->
<para>
Finds an element in a #GSList, using a supplied function to find the desired
element.
It iterates over the list, calling the given function which should return 0
when the desired element is found.
The function takes two #gconstpointer arguments, the #GSList element's data as
the first argument and the given user data.
</para>

@list: a #GSList.
@data: user data passed to the function.
@func: the function to call for each element. It should return 0 when the
desired element is found.
@Returns: the found #GSList element, or %NULL if it is not found.


<!-- ##### FUNCTION g_slist_position ##### -->
<para>
Gets the position of the given element in the #GSList (starting from 0).
</para>

@list: a #GSList.
@llink: an element in the #GSList.
@Returns: the position of the element in the #GSList, or -1 if the element
is not found.


<!-- ##### FUNCTION g_slist_index ##### -->
<para>
Gets the position of the element containing the given data (starting from 0).
</para>

@list: a #GSList.
@data: the data to find.
@Returns: the index of the element containing the data, or -1 if the data
is not found.


<!-- ##### FUNCTION g_slist_push_allocator ##### -->
<para>
Sets the allocator to use to allocate #GSList elements.
Use g_slist_pop_allocator() to restore the previous allocator.
</para>
<para>
Note that this function is not available if GLib has been compiled
with <option>--disable-mem-pools</option>
</para>

@dummy: the #GAllocator to use when allocating #GSList elements.
<!-- # Unused Parameters # -->
@Deprecated:2.10: It does nothing, since #GSList has been
converted to the <link linkend="glib-Memory-Slices">slice allocator</link>


<!-- ##### FUNCTION g_slist_pop_allocator ##### -->
<para>
Restores the previous #GAllocator, used when allocating #GSList elements.
</para>
<para>
Note that this function is not available if GLib has been compiled
with <option>--disable-mem-pools</option>
</para>

<!-- # Unused Parameters # -->
@Deprecated:2.10: It does nothing, since #GSList has been
converted to the <link linkend="glib-Memory-Slices">slice allocator</link>


