83f69ea4194a6e2e61f67b71e0f0b938bb197c29
[platform/upstream/glib2.0.git] / docs / reference / glib / html / glib-Doubly-Linked-Lists.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>Doubly-Linked Lists</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
7 <link rel="home" href="index.html" title="GLib Reference Manual">
8 <link rel="up" href="glib-data-types.html" title="GLib Data Types">
9 <link rel="prev" href="glib-Memory-Chunks.html" title="Memory Chunks">
10 <link rel="next" href="glib-Singly-Linked-Lists.html" title="Singly-Linked Lists">
11 <meta name="generator" content="GTK-Doc V1.13 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
13 <link rel="chapter" href="glib.html" title="GLib Overview">
14 <link rel="chapter" href="glib-fundamentals.html" title="GLib Fundamentals">
15 <link rel="chapter" href="glib-core.html" title="GLib Core Application Support">
16 <link rel="chapter" href="glib-utilities.html" title="GLib Utilities">
17 <link rel="chapter" href="glib-data-types.html" title="GLib Data Types">
18 <link rel="chapter" href="tools.html" title="GLib Tools">
19 <link rel="index" href="api-index-full.html" title="Index">
20 <link rel="index" href="api-index-deprecated.html" title="Index of deprecated symbols">
21 <link rel="index" href="api-index-2-2.html" title="Index of new symbols in 2.2">
22 <link rel="index" href="api-index-2-4.html" title="Index of new symbols in 2.4">
23 <link rel="index" href="api-index-2-6.html" title="Index of new symbols in 2.6">
24 <link rel="index" href="api-index-2-8.html" title="Index of new symbols in 2.8">
25 <link rel="index" href="api-index-2-10.html" title="Index of new symbols in 2.10">
26 <link rel="index" href="api-index-2-12.html" title="Index of new symbols in 2.12">
27 <link rel="index" href="api-index-2-14.html" title="Index of new symbols in 2.14">
28 <link rel="index" href="api-index-2-16.html" title="Index of new symbols in 2.16">
29 <link rel="index" href="api-index-2-18.html" title="Index of new symbols in 2.18">
30 <link rel="index" href="api-index-2-20.html" title="Index of new symbols in 2.20">
31 <link rel="index" href="api-index-2-22.html" title="Index of new symbols in 2.22">
32 <link rel="index" href="api-index-2-24.html" title="Index of new symbols in 2.24">
33 </head>
34 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
35 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
36 <tr valign="middle">
37 <td><a accesskey="p" href="glib-Memory-Chunks.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
38 <td><a accesskey="u" href="glib-data-types.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
39 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
40 <th width="100%" align="center">GLib Reference Manual</th>
41 <td><a accesskey="n" href="glib-Singly-Linked-Lists.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
42 </tr>
43 <tr><td colspan="5" class="shortcuts">
44 <a href="#glib-Doubly-Linked-Lists.synopsis" class="shortcut">Top</a>
45                    | 
46                   <a href="#glib-Doubly-Linked-Lists.description" class="shortcut">Description</a>
47 </td></tr>
48 </table>
49 <div class="refentry" title="Doubly-Linked Lists">
50 <a name="glib-Doubly-Linked-Lists"></a><div class="titlepage"></div>
51 <div class="refnamediv"><table width="100%"><tr>
52 <td valign="top">
53 <h2><span class="refentrytitle"><a name="glib-Doubly-Linked-Lists.top_of_page"></a>Doubly-Linked Lists</span></h2>
54 <p>Doubly-Linked Lists — linked lists containing integer values or
55                     pointers to data, with the ability to iterate
56                     over the list in both directions</p>
57 </td>
58 <td valign="top" align="right"></td>
59 </tr></table></div>
60 <div class="refsynopsisdiv" title="Synopsis">
61 <a name="glib-Doubly-Linked-Lists.synopsis"></a><h2>Synopsis</h2>
62 <pre class="synopsis">
63 #include &lt;glib.h&gt;
64
65                     <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList">GList</a>;
66
67 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-append" title="g_list_append ()">g_list_append</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
68                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);
69 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-prepend" title="g_list_prepend ()">g_list_prepend</a>                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
70                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);
71 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert" title="g_list_insert ()">g_list_insert</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
72                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
73                                                          <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a> position);
74 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert-before" title="g_list_insert_before ()">g_list_insert_before</a>                (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
75                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *sibling,
76                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);
77 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert-sorted" title="g_list_insert_sorted ()">g_list_insert_sorted</a>                (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
78                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
79                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> func);
80 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove" title="g_list_remove ()">g_list_remove</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
81                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);
82 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove-link" title="g_list_remove_link ()">g_list_remove_link</a>                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
83                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *llink);
84 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-delete-link" title="g_list_delete_link ()">g_list_delete_link</a>                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
85                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *link_);
86 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove-all" title="g_list_remove_all ()">g_list_remove_all</a>                   (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
87                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);
88 <span class="returnvalue">void</span>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-free" title="g_list_free ()">g_list_free</a>                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
89
90 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-alloc" title="g_list_alloc ()">g_list_alloc</a>                        (void);
91 <span class="returnvalue">void</span>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-free-1" title="g_list_free_1 ()">g_list_free_1</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
92 #define             <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-free1" title="g_list_free1">g_list_free1</a>
93
94 <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a>               <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-length" title="g_list_length ()">g_list_length</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
95 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-copy" title="g_list_copy ()">g_list_copy</a>                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
96 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-reverse" title="g_list_reverse ()">g_list_reverse</a>                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
97 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-sort" title="g_list_sort ()">g_list_sort</a>                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
98                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> compare_func);
99 <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                (<a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()">*GCompareFunc</a>)                     (<a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> a,
100                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> b);
101 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert-sorted-with-data" title="g_list_insert_sorted_with_data ()">g_list_insert_sorted_with_data</a>      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
102                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
103                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc" title="GCompareDataFunc ()"><span class="returnvalue">GCompareDataFunc</span></a> func,
104                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);
105 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-sort-with-data" title="g_list_sort_with_data ()">g_list_sort_with_data</a>               (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
106                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc" title="GCompareDataFunc ()"><span class="returnvalue">GCompareDataFunc</span></a> compare_func,
107                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);
108 <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                (<a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc" title="GCompareDataFunc ()">*GCompareDataFunc</a>)                 (<a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> a,
109                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> b,
110                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);
111 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-concat" title="g_list_concat ()">g_list_concat</a>                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list1,
112                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list2);
113 <span class="returnvalue">void</span>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-foreach" title="g_list_foreach ()">g_list_foreach</a>                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
114                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GFunc" title="GFunc ()"><span class="returnvalue">GFunc</span></a> func,
115                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);
116 <span class="returnvalue">void</span>                (<a class="link" href="glib-Doubly-Linked-Lists.html#GFunc" title="GFunc ()">*GFunc</a>)                            (<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
117                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);
118
119 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-first" title="g_list_first ()">g_list_first</a>                        (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
120 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-last" title="g_list_last ()">g_list_last</a>                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);
121 #define             <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-previous" title="g_list_previous()">g_list_previous</a>                     (list)
122 #define             <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-next" title="g_list_next()">g_list_next</a>                         (list)
123 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-nth" title="g_list_nth ()">g_list_nth</a>                          (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
124                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);
125 <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a>            <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-nth-data" title="g_list_nth_data ()">g_list_nth_data</a>                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
126                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);
127 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-nth-prev" title="g_list_nth_prev ()">g_list_nth_prev</a>                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
128                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);
129
130 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-find" title="g_list_find ()">g_list_find</a>                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
131                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);
132 <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-find-custom" title="g_list_find_custom ()">g_list_find_custom</a>                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
133                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data,
134                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> func);
135 <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-position" title="g_list_position ()">g_list_position</a>                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
136                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *llink);
137 <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-index" title="g_list_index ()">g_list_index</a>                        (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
138                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);
139
140 <span class="returnvalue">void</span>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-push-allocator" title="g_list_push_allocator ()">g_list_push_allocator</a>               (<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> allocator);
141 <span class="returnvalue">void</span>                <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-pop-allocator" title="g_list_pop_allocator ()">g_list_pop_allocator</a>                (void);
142 </pre>
143 </div>
144 <div class="refsect1" title="Description">
145 <a name="glib-Doubly-Linked-Lists.description"></a><h2>Description</h2>
146 <p>
147 The <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> structure and its associated functions provide a standard
148 doubly-linked list data structure.
149 </p>
150 <p>
151 Each element in the list contains a piece of data, together with
152 pointers which link to the previous and next elements in the list.
153 Using these pointers it is possible to move through the list in both
154 directions (unlike the Singly-Linked Lists which
155 only allows movement through the list in the forward direction).
156 </p>
157 <p>
158 The data contained in each element can be either integer values, by
159 using one of the <a class="link" href="glib-Type-Conversion-Macros.html" title="Type Conversion Macros">Type
160 Conversion Macros</a>, or simply pointers to any type of data.
161 </p>
162 <p>
163 List elements are allocated from the <a class="link" href="glib-Memory-Slices.html" title="Memory Slices">slice allocator</a>, which is more
164 efficient than allocating elements individually.
165 </p>
166 <p>
167 Note that most of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> functions expect to be passed a pointer
168 to the first element in the list. The functions which insert
169 elements return the new start of the list, which may have changed.
170 </p>
171 <p>
172 There is no function to create a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>. <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> is considered to be
173 the empty list so you simply set a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>* to <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>.
174 </p>
175 <p>
176 To add elements, use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-append" title="g_list_append ()"><code class="function">g_list_append()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-prepend" title="g_list_prepend ()"><code class="function">g_list_prepend()</code></a>,
177 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert" title="g_list_insert ()"><code class="function">g_list_insert()</code></a> and <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert-sorted" title="g_list_insert_sorted ()"><code class="function">g_list_insert_sorted()</code></a>.
178 </p>
179 <p>
180 To remove elements, use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove" title="g_list_remove ()"><code class="function">g_list_remove()</code></a>.
181 </p>
182 <p>
183 To find elements in the list use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-first" title="g_list_first ()"><code class="function">g_list_first()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-last" title="g_list_last ()"><code class="function">g_list_last()</code></a>,
184 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-next" title="g_list_next()"><code class="function">g_list_next()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-previous" title="g_list_previous()"><code class="function">g_list_previous()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-nth" title="g_list_nth ()"><code class="function">g_list_nth()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-nth-data" title="g_list_nth_data ()"><code class="function">g_list_nth_data()</code></a>,
185 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-find" title="g_list_find ()"><code class="function">g_list_find()</code></a> and <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-find-custom" title="g_list_find_custom ()"><code class="function">g_list_find_custom()</code></a>.
186 </p>
187 <p>
188 To find the index of an element use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-position" title="g_list_position ()"><code class="function">g_list_position()</code></a> and
189 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-index" title="g_list_index ()"><code class="function">g_list_index()</code></a>.
190 </p>
191 <p>
192 To call a function for each element in the list use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-foreach" title="g_list_foreach ()"><code class="function">g_list_foreach()</code></a>.
193 </p>
194 <p>
195 To free the entire list, use <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-free" title="g_list_free ()"><code class="function">g_list_free()</code></a>.</p>
196 </div>
197 <div class="refsect1" title="Details">
198 <a name="glib-Doubly-Linked-Lists.details"></a><h2>Details</h2>
199 <div class="refsect2" title="GList">
200 <a name="GList"></a><h3>GList</h3>
201 <pre class="programlisting">typedef struct {
202   gpointer data;
203   GList *next;
204   GList *prev;
205 } GList;
206 </pre>
207 <p>
208 The <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> struct is used for each element in a doubly-linked list.</p>
209 <div class="variablelist"><table border="0">
210 <col align="left" valign="top">
211 <tbody>
212 <tr>
213 <td><p><span class="term"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GList.data"></a>data</code></em>;</span></p></td>
214 <td> holds the element's data, which can be a pointer to any kind
215        of data, or any integer value using the <a class="link" href="glib-Type-Conversion-Macros.html" title="Type Conversion Macros">Type Conversion
216        Macros</a>.
217 </td>
218 </tr>
219 <tr>
220 <td><p><span class="term"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> *<em class="structfield"><code><a name="GList.next"></a>next</code></em>;</span></p></td>
221 <td> contains the link to the next element in the list.
222 </td>
223 </tr>
224 <tr>
225 <td><p><span class="term"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> *<em class="structfield"><code><a name="GList.prev"></a>prev</code></em>;</span></p></td>
226 <td> contains the link to the previous element in the list.
227 </td>
228 </tr>
229 </tbody>
230 </table></div>
231 </div>
232 <hr>
233 <div class="refsect2" title="g_list_append ()">
234 <a name="g-list-append"></a><h3>g_list_append ()</h3>
235 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_append                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
236                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);</pre>
237 <p>
238 Adds a new element on to the end of the list.
239 </p>
240 <p>
241 </p>
242 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
243 <h3 class="title">Note</h3>
244 <p>
245 The return value is the new start of the list, which 
246 may have changed, so make sure you store the new value.
247 </p>
248 </div>
249 <p>
250 </p>
251 <p>
252 </p>
253 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
254 <h3 class="title">Note</h3>
255 <p>
256 Note that <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-append" title="g_list_append ()"><code class="function">g_list_append()</code></a> has to traverse the entire list 
257 to find the end, which is inefficient when adding multiple 
258 elements. A common idiom to avoid the inefficiency is to prepend 
259 the elements and reverse the list when all elements have been added.
260 </p>
261 </div>
262 <p>
263 </p>
264 <p>
265 </p>
266 <div class="informalexample"><pre class="programlisting">
267 /* Notice that these are initialized to the empty list. */
268 GList *list = NULL, *number_list = NULL;
269
270 /* This is a list of strings. */
271 list = g_list_append (list, "first");
272 list = g_list_append (list, "second");
273
274 /* This is a list of integers. */
275 number_list = g_list_append (number_list, GINT_TO_POINTER (27));
276 number_list = g_list_append (number_list, GINT_TO_POINTER (14));
277 </pre></div>
278 <div class="variablelist"><table border="0">
279 <col align="left" valign="top">
280 <tbody>
281 <tr>
282 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
283 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
284 </td>
285 </tr>
286 <tr>
287 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
288 <td> the data for the new element
289 </td>
290 </tr>
291 <tr>
292 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
293 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
294 </td>
295 </tr>
296 </tbody>
297 </table></div>
298 </div>
299 <hr>
300 <div class="refsect2" title="g_list_prepend ()">
301 <a name="g-list-prepend"></a><h3>g_list_prepend ()</h3>
302 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_prepend                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
303                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);</pre>
304 <p>
305 Adds a new element on to the start of the list.
306 </p>
307 <p>
308 </p>
309 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
310 <h3 class="title">Note</h3>
311 <p>
312 The return value is the new start of the list, which 
313 may have changed, so make sure you store the new value.
314 </p>
315 </div>
316 <p>
317 </p>
318 <p>
319 </p>
320 <div class="informalexample"><pre class="programlisting"> 
321 /* Notice that it is initialized to the empty list. */
322 GList *list = NULL;
323 list = g_list_prepend (list, "last");
324 list = g_list_prepend (list, "first");
325 </pre></div>
326 <div class="variablelist"><table border="0">
327 <col align="left" valign="top">
328 <tbody>
329 <tr>
330 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
331 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
332 </td>
333 </tr>
334 <tr>
335 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
336 <td> the data for the new element
337 </td>
338 </tr>
339 <tr>
340 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
341 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
342 </td>
343 </tr>
344 </tbody>
345 </table></div>
346 </div>
347 <hr>
348 <div class="refsect2" title="g_list_insert ()">
349 <a name="g-list-insert"></a><h3>g_list_insert ()</h3>
350 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_insert                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
351                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
352                                                          <a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a> position);</pre>
353 <p>
354 Inserts a new element into the list at the given position.</p>
355 <div class="variablelist"><table border="0">
356 <col align="left" valign="top">
357 <tbody>
358 <tr>
359 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
360 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
361 </td>
362 </tr>
363 <tr>
364 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
365 <td> the data for the new element
366 </td>
367 </tr>
368 <tr>
369 <td><p><span class="term"><em class="parameter"><code>position</code></em> :</span></p></td>
370 <td> the position to insert the element. If this is 
371     negative, or is larger than the number of elements in the 
372     list, the new element is added on to the end of the list.
373 </td>
374 </tr>
375 <tr>
376 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
377 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
378 </td>
379 </tr>
380 </tbody>
381 </table></div>
382 </div>
383 <hr>
384 <div class="refsect2" title="g_list_insert_before ()">
385 <a name="g-list-insert-before"></a><h3>g_list_insert_before ()</h3>
386 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_insert_before                (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
387                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *sibling,
388                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data);</pre>
389 <p>
390 Inserts a new element into the list before the given position.</p>
391 <div class="variablelist"><table border="0">
392 <col align="left" valign="top">
393 <tbody>
394 <tr>
395 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
396 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
397 </td>
398 </tr>
399 <tr>
400 <td><p><span class="term"><em class="parameter"><code>sibling</code></em> :</span></p></td>
401 <td> the list element before which the new element 
402     is inserted or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> to insert at the end of the list
403 </td>
404 </tr>
405 <tr>
406 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
407 <td> the data for the new element
408 </td>
409 </tr>
410 <tr>
411 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
412 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
413 </td>
414 </tr>
415 </tbody>
416 </table></div>
417 </div>
418 <hr>
419 <div class="refsect2" title="g_list_insert_sorted ()">
420 <a name="g-list-insert-sorted"></a><h3>g_list_insert_sorted ()</h3>
421 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_insert_sorted                (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
422                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
423                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> func);</pre>
424 <p>
425 Inserts a new element into the list, using the given comparison 
426 function to determine its position.</p>
427 <div class="variablelist"><table border="0">
428 <col align="left" valign="top">
429 <tbody>
430 <tr>
431 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
432 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
433 </td>
434 </tr>
435 <tr>
436 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
437 <td> the data for the new element
438 </td>
439 </tr>
440 <tr>
441 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
442 <td> the function to compare elements in the list. It should 
443     return a number &gt; 0 if the first parameter comes after the 
444     second parameter in the sort order.
445 </td>
446 </tr>
447 <tr>
448 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
449 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
450 </td>
451 </tr>
452 </tbody>
453 </table></div>
454 </div>
455 <hr>
456 <div class="refsect2" title="g_list_remove ()">
457 <a name="g-list-remove"></a><h3>g_list_remove ()</h3>
458 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_remove                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
459                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);</pre>
460 <p>
461 Removes an element from a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
462 If two elements contain the same data, only the first is removed.
463 If none of the elements contain the data, the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> is unchanged.</p>
464 <div class="variablelist"><table border="0">
465 <col align="left" valign="top">
466 <tbody>
467 <tr>
468 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
469 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
470 </td>
471 </tr>
472 <tr>
473 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
474 <td> the data of the element to remove
475 </td>
476 </tr>
477 <tr>
478 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
479 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
480 </td>
481 </tr>
482 </tbody>
483 </table></div>
484 </div>
485 <hr>
486 <div class="refsect2" title="g_list_remove_link ()">
487 <a name="g-list-remove-link"></a><h3>g_list_remove_link ()</h3>
488 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_remove_link                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
489                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *llink);</pre>
490 <p>
491 Removes an element from a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, without freeing the element.
492 The removed element's prev and next links are set to <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, so 
493 that it becomes a self-contained list with one element.</p>
494 <div class="variablelist"><table border="0">
495 <col align="left" valign="top">
496 <tbody>
497 <tr>
498 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
499 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
500 </td>
501 </tr>
502 <tr>
503 <td><p><span class="term"><em class="parameter"><code>llink</code></em> :</span></p></td>
504 <td> an element in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
505 </td>
506 </tr>
507 <tr>
508 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
509 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, without the element
510 </td>
511 </tr>
512 </tbody>
513 </table></div>
514 </div>
515 <hr>
516 <div class="refsect2" title="g_list_delete_link ()">
517 <a name="g-list-delete-link"></a><h3>g_list_delete_link ()</h3>
518 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_delete_link                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
519                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *link_);</pre>
520 <p>
521 Removes the node link_ from the list and frees it. 
522 Compare this to <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove-link" title="g_list_remove_link ()"><code class="function">g_list_remove_link()</code></a> which removes the node 
523 without freeing it.</p>
524 <div class="variablelist"><table border="0">
525 <col align="left" valign="top">
526 <tbody>
527 <tr>
528 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
529 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
530 </td>
531 </tr>
532 <tr>
533 <td><p><span class="term"><em class="parameter"><code>link_</code></em> :</span></p></td>
534 <td> node to delete from <em class="parameter"><code>list</code></em>
535 </td>
536 </tr>
537 <tr>
538 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
539 <td> the new head of <em class="parameter"><code>list</code></em>
540 </td>
541 </tr>
542 </tbody>
543 </table></div>
544 </div>
545 <hr>
546 <div class="refsect2" title="g_list_remove_all ()">
547 <a name="g-list-remove-all"></a><h3>g_list_remove_all ()</h3>
548 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_remove_all                   (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
549                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);</pre>
550 <p>
551 Removes all list nodes with data equal to <em class="parameter"><code>data</code></em>. 
552 Returns the new head of the list. Contrast with 
553 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove" title="g_list_remove ()"><code class="function">g_list_remove()</code></a> which removes only the first node 
554 matching the given data.</p>
555 <div class="variablelist"><table border="0">
556 <col align="left" valign="top">
557 <tbody>
558 <tr>
559 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
560 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
561 </td>
562 </tr>
563 <tr>
564 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
565 <td> data to remove
566 </td>
567 </tr>
568 <tr>
569 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
570 <td> new head of <em class="parameter"><code>list</code></em>
571 </td>
572 </tr>
573 </tbody>
574 </table></div>
575 </div>
576 <hr>
577 <div class="refsect2" title="g_list_free ()">
578 <a name="g-list-free"></a><h3>g_list_free ()</h3>
579 <pre class="programlisting"><span class="returnvalue">void</span>                g_list_free                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
580 <p>
581 Frees all of the memory used by a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
582 The freed elements are returned to the slice allocator.
583 </p>
584 <p>
585 </p>
586 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
587 <h3 class="title">Note</h3>
588 <p>
589 If list elements contain dynamically-allocated memory, 
590 they should be freed first.
591 </p>
592 </div>
593 <div class="variablelist"><table border="0">
594 <col align="left" valign="top">
595 <tbody><tr>
596 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
597 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
598 </td>
599 </tr></tbody>
600 </table></div>
601 </div>
602 <hr>
603 <div class="refsect2" title="g_list_alloc ()">
604 <a name="g-list-alloc"></a><h3>g_list_alloc ()</h3>
605 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_alloc                        (void);</pre>
606 <p>
607 Allocates space for one <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element. It is called by
608 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-append" title="g_list_append ()"><code class="function">g_list_append()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-prepend" title="g_list_prepend ()"><code class="function">g_list_prepend()</code></a>, <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert" title="g_list_insert ()"><code class="function">g_list_insert()</code></a> and
609 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-insert-sorted" title="g_list_insert_sorted ()"><code class="function">g_list_insert_sorted()</code></a> and so is rarely used on its own.</p>
610 <div class="variablelist"><table border="0">
611 <col align="left" valign="top">
612 <tbody><tr>
613 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
614 <td> a pointer to the newly-allocated <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element.
615 </td>
616 </tr></tbody>
617 </table></div>
618 </div>
619 <hr>
620 <div class="refsect2" title="g_list_free_1 ()">
621 <a name="g-list-free-1"></a><h3>g_list_free_1 ()</h3>
622 <pre class="programlisting"><span class="returnvalue">void</span>                g_list_free_1                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
623 <p>
624 Frees one <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element.
625 It is usually used after <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-remove-link" title="g_list_remove_link ()"><code class="function">g_list_remove_link()</code></a>.</p>
626 <div class="variablelist"><table border="0">
627 <col align="left" valign="top">
628 <tbody><tr>
629 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
630 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element
631 </td>
632 </tr></tbody>
633 </table></div>
634 </div>
635 <hr>
636 <div class="refsect2" title="g_list_free1">
637 <a name="g-list-free1"></a><h3>g_list_free1</h3>
638 <pre class="programlisting">#define             g_list_free1</pre>
639 <p>
640 Another name for <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-free-1" title="g_list_free_1 ()"><code class="function">g_list_free_1()</code></a>.</p>
641 </div>
642 <hr>
643 <div class="refsect2" title="g_list_length ()">
644 <a name="g-list-length"></a><h3>g_list_length ()</h3>
645 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a>               g_list_length                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
646 <p>
647 Gets the number of elements in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
648 </p>
649 <p>
650 </p>
651 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
652 <h3 class="title">Note</h3>
653 <p>
654 This function iterates over the whole list to 
655 count its elements.
656 </p>
657 </div>
658 <div class="variablelist"><table border="0">
659 <col align="left" valign="top">
660 <tbody>
661 <tr>
662 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
663 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
664 </td>
665 </tr>
666 <tr>
667 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
668 <td> the number of elements in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
669 </td>
670 </tr>
671 </tbody>
672 </table></div>
673 </div>
674 <hr>
675 <div class="refsect2" title="g_list_copy ()">
676 <a name="g-list-copy"></a><h3>g_list_copy ()</h3>
677 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_copy                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
678 <p>
679 Copies a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
680 </p>
681 <p>
682 </p>
683 <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
684 <h3 class="title">Note</h3>
685 <p>
686 Note that this is a "shallow" copy. If the list elements 
687 consist of pointers to data, the pointers are copied but 
688 the actual data is not.
689 </p>
690 </div>
691 <div class="variablelist"><table border="0">
692 <col align="left" valign="top">
693 <tbody>
694 <tr>
695 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
696 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
697 </td>
698 </tr>
699 <tr>
700 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
701 <td> a copy of <em class="parameter"><code>list</code></em>
702 </td>
703 </tr>
704 </tbody>
705 </table></div>
706 </div>
707 <hr>
708 <div class="refsect2" title="g_list_reverse ()">
709 <a name="g-list-reverse"></a><h3>g_list_reverse ()</h3>
710 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_reverse                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
711 <p>
712 Reverses a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
713 It simply switches the next and prev pointers of each element.</p>
714 <div class="variablelist"><table border="0">
715 <col align="left" valign="top">
716 <tbody>
717 <tr>
718 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
719 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
720 </td>
721 </tr>
722 <tr>
723 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
724 <td> the start of the reversed <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
725 </td>
726 </tr>
727 </tbody>
728 </table></div>
729 </div>
730 <hr>
731 <div class="refsect2" title="g_list_sort ()">
732 <a name="g-list-sort"></a><h3>g_list_sort ()</h3>
733 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_sort                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
734                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> compare_func);</pre>
735 <p>
736 Sorts a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> using the given comparison function.</p>
737 <div class="variablelist"><table border="0">
738 <col align="left" valign="top">
739 <tbody>
740 <tr>
741 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
742 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
743 </td>
744 </tr>
745 <tr>
746 <td><p><span class="term"><em class="parameter"><code>compare_func</code></em> :</span></p></td>
747 <td> the comparison function used to sort the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
748     This function is passed the data from 2 elements of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> 
749     and should return 0 if they are equal, a negative value if the 
750     first element comes before the second, or a positive value if 
751     the first element comes after the second.
752 </td>
753 </tr>
754 <tr>
755 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
756 <td> the start of the sorted <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
757 </td>
758 </tr>
759 </tbody>
760 </table></div>
761 </div>
762 <hr>
763 <div class="refsect2" title="GCompareFunc ()">
764 <a name="GCompareFunc"></a><h3>GCompareFunc ()</h3>
765 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                (*GCompareFunc)                     (<a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> a,
766                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> b);</pre>
767 <p>
768 Specifies the type of a comparison function used to compare two
769 values.  The function should return a negative integer if the first
770 value comes before the second, 0 if they are equal, or a positive
771 integer if the first value comes after the second.</p>
772 <div class="variablelist"><table border="0">
773 <col align="left" valign="top">
774 <tbody>
775 <tr>
776 <td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
777 <td> a value.
778 </td>
779 </tr>
780 <tr>
781 <td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
782 <td> a value to compare with.
783 </td>
784 </tr>
785 <tr>
786 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
787 <td> negative value if <em class="parameter"><code>a</code></em> &lt; <em class="parameter"><code>b</code></em>; zero if <em class="parameter"><code>a</code></em> = <em class="parameter"><code>b</code></em>; positive
788           value if <em class="parameter"><code>a</code></em> &gt; <em class="parameter"><code>b</code></em>.
789 </td>
790 </tr>
791 </tbody>
792 </table></div>
793 </div>
794 <hr>
795 <div class="refsect2" title="g_list_insert_sorted_with_data ()">
796 <a name="g-list-insert-sorted-with-data"></a><h3>g_list_insert_sorted_with_data ()</h3>
797 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_insert_sorted_with_data      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
798                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
799                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc" title="GCompareDataFunc ()"><span class="returnvalue">GCompareDataFunc</span></a> func,
800                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);</pre>
801 <p>
802 Inserts a new element into the list, using the given comparison 
803 function to determine its position.</p>
804 <div class="variablelist"><table border="0">
805 <col align="left" valign="top">
806 <tbody>
807 <tr>
808 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
809 <td> a pointer to a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
810 </td>
811 </tr>
812 <tr>
813 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
814 <td> the data for the new element
815 </td>
816 </tr>
817 <tr>
818 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
819 <td> the function to compare elements in the list. 
820     It should return a number &gt; 0 if the first parameter 
821     comes after the second parameter in the sort order.
822 </td>
823 </tr>
824 <tr>
825 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
826 <td> user data to pass to comparison function.
827 </td>
828 </tr>
829 <tr>
830 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
831 <td> the new start of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
832
833 </td>
834 </tr>
835 </tbody>
836 </table></div>
837 <p class="since">Since 2.10</p>
838 </div>
839 <hr>
840 <div class="refsect2" title="g_list_sort_with_data ()">
841 <a name="g-list-sort-with-data"></a><h3>g_list_sort_with_data ()</h3>
842 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_sort_with_data               (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
843                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc" title="GCompareDataFunc ()"><span class="returnvalue">GCompareDataFunc</span></a> compare_func,
844                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);</pre>
845 <p>
846 Like <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-sort" title="g_list_sort ()"><code class="function">g_list_sort()</code></a>, but the comparison function accepts 
847 a user data argument.</p>
848 <div class="variablelist"><table border="0">
849 <col align="left" valign="top">
850 <tbody>
851 <tr>
852 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
853 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
854 </td>
855 </tr>
856 <tr>
857 <td><p><span class="term"><em class="parameter"><code>compare_func</code></em> :</span></p></td>
858 <td> comparison function
859 </td>
860 </tr>
861 <tr>
862 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
863 <td> user data to pass to comparison function
864 </td>
865 </tr>
866 <tr>
867 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
868 <td> the new head of <em class="parameter"><code>list</code></em>
869 </td>
870 </tr>
871 </tbody>
872 </table></div>
873 </div>
874 <hr>
875 <div class="refsect2" title="GCompareDataFunc ()">
876 <a name="GCompareDataFunc"></a><h3>GCompareDataFunc ()</h3>
877 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                (*GCompareDataFunc)                 (<a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> a,
878                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> b,
879                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);</pre>
880 <p>
881 Specifies the type of a comparison function used to compare two
882 values.  The function should return a negative integer if the first
883 value comes before the second, 0 if they are equal, or a positive
884 integer if the first value comes after the second.</p>
885 <div class="variablelist"><table border="0">
886 <col align="left" valign="top">
887 <tbody>
888 <tr>
889 <td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
890 <td> a value.
891 </td>
892 </tr>
893 <tr>
894 <td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
895 <td> a value to compare with.
896 </td>
897 </tr>
898 <tr>
899 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
900 <td> user data to pass to comparison function.
901 </td>
902 </tr>
903 <tr>
904 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
905 <td> negative value if <em class="parameter"><code>a</code></em> &lt; <em class="parameter"><code>b</code></em>; zero if <em class="parameter"><code>a</code></em> = <em class="parameter"><code>b</code></em>; positive
906           value if <em class="parameter"><code>a</code></em> &gt; <em class="parameter"><code>b</code></em>.
907 </td>
908 </tr>
909 </tbody>
910 </table></div>
911 </div>
912 <hr>
913 <div class="refsect2" title="g_list_concat ()">
914 <a name="g-list-concat"></a><h3>g_list_concat ()</h3>
915 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_concat                       (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list1,
916                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list2);</pre>
917 <p>
918 Adds the second <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> onto the end of the first <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
919 Note that the elements of the second <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> are not copied.
920 They are used directly.</p>
921 <div class="variablelist"><table border="0">
922 <col align="left" valign="top">
923 <tbody>
924 <tr>
925 <td><p><span class="term"><em class="parameter"><code>list1</code></em> :</span></p></td>
926 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
927 </td>
928 </tr>
929 <tr>
930 <td><p><span class="term"><em class="parameter"><code>list2</code></em> :</span></p></td>
931 <td> the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> to add to the end of the first <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
932 </td>
933 </tr>
934 <tr>
935 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
936 <td> the start of the new <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
937 </td>
938 </tr>
939 </tbody>
940 </table></div>
941 </div>
942 <hr>
943 <div class="refsect2" title="g_list_foreach ()">
944 <a name="g-list-foreach"></a><h3>g_list_foreach ()</h3>
945 <pre class="programlisting"><span class="returnvalue">void</span>                g_list_foreach                      (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
946                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GFunc" title="GFunc ()"><span class="returnvalue">GFunc</span></a> func,
947                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);</pre>
948 <p>
949 Calls a function for each element of a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
950 <div class="variablelist"><table border="0">
951 <col align="left" valign="top">
952 <tbody>
953 <tr>
954 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
955 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
956 </td>
957 </tr>
958 <tr>
959 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
960 <td> the function to call with each element's data
961 </td>
962 </tr>
963 <tr>
964 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
965 <td> user data to pass to the function
966 </td>
967 </tr>
968 </tbody>
969 </table></div>
970 </div>
971 <hr>
972 <div class="refsect2" title="GFunc ()">
973 <a name="GFunc"></a><h3>GFunc ()</h3>
974 <pre class="programlisting"><span class="returnvalue">void</span>                (*GFunc)                            (<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> data,
975                                                          <a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> user_data);</pre>
976 <p>
977 Specifies the type of functions passed to <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-foreach" title="g_list_foreach ()"><code class="function">g_list_foreach()</code></a> and
978 <a class="link" href="glib-Singly-Linked-Lists.html#g-slist-foreach" title="g_slist_foreach ()"><code class="function">g_slist_foreach()</code></a>.</p>
979 <div class="variablelist"><table border="0">
980 <col align="left" valign="top">
981 <tbody>
982 <tr>
983 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
984 <td> the element's data.
985 </td>
986 </tr>
987 <tr>
988 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
989 <td> user data passed to <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-foreach" title="g_list_foreach ()"><code class="function">g_list_foreach()</code></a> or
990             <a class="link" href="glib-Singly-Linked-Lists.html#g-slist-foreach" title="g_slist_foreach ()"><code class="function">g_slist_foreach()</code></a>.
991 </td>
992 </tr>
993 </tbody>
994 </table></div>
995 </div>
996 <hr>
997 <div class="refsect2" title="g_list_first ()">
998 <a name="g-list-first"></a><h3>g_list_first ()</h3>
999 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_first                        (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
1000 <p>
1001 Gets the first element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
1002 <div class="variablelist"><table border="0">
1003 <col align="left" valign="top">
1004 <tbody>
1005 <tr>
1006 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1007 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1008 </td>
1009 </tr>
1010 <tr>
1011 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1012 <td> the first element in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, 
1013     or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> has no elements
1014 </td>
1015 </tr>
1016 </tbody>
1017 </table></div>
1018 </div>
1019 <hr>
1020 <div class="refsect2" title="g_list_last ()">
1021 <a name="g-list-last"></a><h3>g_list_last ()</h3>
1022 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_last                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list);</pre>
1023 <p>
1024 Gets the last element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
1025 <div class="variablelist"><table border="0">
1026 <col align="left" valign="top">
1027 <tbody>
1028 <tr>
1029 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1030 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1031 </td>
1032 </tr>
1033 <tr>
1034 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1035 <td> the last element in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, 
1036     or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> has no elements
1037 </td>
1038 </tr>
1039 </tbody>
1040 </table></div>
1041 </div>
1042 <hr>
1043 <div class="refsect2" title="g_list_previous()">
1044 <a name="g-list-previous"></a><h3>g_list_previous()</h3>
1045 <pre class="programlisting">#define             g_list_previous(list)</pre>
1046 <p>
1047 A convenience macro to get the previous element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
1048 <div class="variablelist"><table border="0">
1049 <col align="left" valign="top">
1050 <tbody>
1051 <tr>
1052 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1053 <td> an element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
1054 </td>
1055 </tr>
1056 <tr>
1057 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1058 <td> the previous element, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if there are no previous
1059           elements.
1060 </td>
1061 </tr>
1062 </tbody>
1063 </table></div>
1064 </div>
1065 <hr>
1066 <div class="refsect2" title="g_list_next()">
1067 <a name="g-list-next"></a><h3>g_list_next()</h3>
1068 <pre class="programlisting">#define             g_list_next(list)</pre>
1069 <p>
1070 A convenience macro to get the next element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
1071 <div class="variablelist"><table border="0">
1072 <col align="left" valign="top">
1073 <tbody>
1074 <tr>
1075 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1076 <td> an element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.
1077 </td>
1078 </tr>
1079 <tr>
1080 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1081 <td> the next element, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if there are no more elements.
1082 </td>
1083 </tr>
1084 </tbody>
1085 </table></div>
1086 </div>
1087 <hr>
1088 <div class="refsect2" title="g_list_nth ()">
1089 <a name="g-list-nth"></a><h3>g_list_nth ()</h3>
1090 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_nth                          (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1091                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);</pre>
1092 <p>
1093 Gets the element at the given position in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>.</p>
1094 <div class="variablelist"><table border="0">
1095 <col align="left" valign="top">
1096 <tbody>
1097 <tr>
1098 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1099 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1100 </td>
1101 </tr>
1102 <tr>
1103 <td><p><span class="term"><em class="parameter"><code>n</code></em> :</span></p></td>
1104 <td> the position of the element, counting from 0
1105 </td>
1106 </tr>
1107 <tr>
1108 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1109 <td> the element, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if the position is off 
1110     the end of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1111 </td>
1112 </tr>
1113 </tbody>
1114 </table></div>
1115 </div>
1116 <hr>
1117 <div class="refsect2" title="g_list_nth_data ()">
1118 <a name="g-list-nth-data"></a><h3>g_list_nth_data ()</h3>
1119 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a>            g_list_nth_data                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1120                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);</pre>
1121 <p>
1122 Gets the data of the element at the given position.</p>
1123 <div class="variablelist"><table border="0">
1124 <col align="left" valign="top">
1125 <tbody>
1126 <tr>
1127 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1128 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1129 </td>
1130 </tr>
1131 <tr>
1132 <td><p><span class="term"><em class="parameter"><code>n</code></em> :</span></p></td>
1133 <td> the position of the element
1134 </td>
1135 </tr>
1136 <tr>
1137 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1138 <td> the element's data, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if the position 
1139     is off the end of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1140 </td>
1141 </tr>
1142 </tbody>
1143 </table></div>
1144 </div>
1145 <hr>
1146 <div class="refsect2" title="g_list_nth_prev ()">
1147 <a name="g-list-nth-prev"></a><h3>g_list_nth_prev ()</h3>
1148 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_nth_prev                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1149                                                          <a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="returnvalue">guint</span></a> n);</pre>
1150 <p>
1151 Gets the element <em class="parameter"><code>n</code></em> places before <em class="parameter"><code>list</code></em>.</p>
1152 <div class="variablelist"><table border="0">
1153 <col align="left" valign="top">
1154 <tbody>
1155 <tr>
1156 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1157 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1158 </td>
1159 </tr>
1160 <tr>
1161 <td><p><span class="term"><em class="parameter"><code>n</code></em> :</span></p></td>
1162 <td> the position of the element, counting from 0
1163 </td>
1164 </tr>
1165 <tr>
1166 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1167 <td> the element, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if the position is 
1168     off the end of the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1169 </td>
1170 </tr>
1171 </tbody>
1172 </table></div>
1173 </div>
1174 <hr>
1175 <div class="refsect2" title="g_list_find ()">
1176 <a name="g-list-find"></a><h3>g_list_find ()</h3>
1177 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_find                         (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1178                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);</pre>
1179 <p>
1180 Finds the element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> which 
1181 contains the given data.</p>
1182 <div class="variablelist"><table border="0">
1183 <col align="left" valign="top">
1184 <tbody>
1185 <tr>
1186 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1187 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1188 </td>
1189 </tr>
1190 <tr>
1191 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
1192 <td> the element data to find
1193 </td>
1194 </tr>
1195 <tr>
1196 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1197 <td> the found <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element, 
1198     or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if it is not found
1199 </td>
1200 </tr>
1201 </tbody>
1202 </table></div>
1203 </div>
1204 <hr>
1205 <div class="refsect2" title="g_list_find_custom ()">
1206 <a name="g-list-find-custom"></a><h3>g_list_find_custom ()</h3>
1207 <pre class="programlisting"><a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a>*              g_list_find_custom                  (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1208                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data,
1209                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareFunc" title="GCompareFunc ()"><span class="returnvalue">GCompareFunc</span></a> func);</pre>
1210 <p>
1211 Finds an element in a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, using a supplied function to 
1212 find the desired element. It iterates over the list, calling 
1213 the given function which should return 0 when the desired 
1214 element is found. The function takes two <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="type">gconstpointer</span></a> arguments, 
1215 the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element's data as the first argument and the 
1216 given user data.</p>
1217 <div class="variablelist"><table border="0">
1218 <col align="left" valign="top">
1219 <tbody>
1220 <tr>
1221 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1222 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1223 </td>
1224 </tr>
1225 <tr>
1226 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
1227 <td> user data passed to the function
1228 </td>
1229 </tr>
1230 <tr>
1231 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
1232 <td> the function to call for each element. 
1233     It should return 0 when the desired element is found
1234 </td>
1235 </tr>
1236 <tr>
1237 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1238 <td> the found <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> element, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if it is not found
1239 </td>
1240 </tr>
1241 </tbody>
1242 </table></div>
1243 </div>
1244 <hr>
1245 <div class="refsect2" title="g_list_position ()">
1246 <a name="g-list-position"></a><h3>g_list_position ()</h3>
1247 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                g_list_position                     (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1248                                                          <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *llink);</pre>
1249 <p>
1250 Gets the position of the given element 
1251 in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> (starting from 0).</p>
1252 <div class="variablelist"><table border="0">
1253 <col align="left" valign="top">
1254 <tbody>
1255 <tr>
1256 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1257 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1258 </td>
1259 </tr>
1260 <tr>
1261 <td><p><span class="term"><em class="parameter"><code>llink</code></em> :</span></p></td>
1262 <td> an element in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1263 </td>
1264 </tr>
1265 <tr>
1266 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1267 <td> the position of the element in the <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>, 
1268     or -1 if the element is not found
1269 </td>
1270 </tr>
1271 </tbody>
1272 </table></div>
1273 </div>
1274 <hr>
1275 <div class="refsect2" title="g_list_index ()">
1276 <a name="g-list-index"></a><h3>g_list_index ()</h3>
1277 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gint" title="gint"><span class="returnvalue">gint</span></a>                g_list_index                        (<a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="returnvalue">GList</span></a> *list,
1278                                                          <a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="returnvalue">gconstpointer</span></a> data);</pre>
1279 <p>
1280 Gets the position of the element containing 
1281 the given data (starting from 0).</p>
1282 <div class="variablelist"><table border="0">
1283 <col align="left" valign="top">
1284 <tbody>
1285 <tr>
1286 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
1287 <td> a <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1288 </td>
1289 </tr>
1290 <tr>
1291 <td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
1292 <td> the data to find
1293 </td>
1294 </tr>
1295 <tr>
1296 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1297 <td> the index of the element containing the data, 
1298     or -1 if the data is not found
1299 </td>
1300 </tr>
1301 </tbody>
1302 </table></div>
1303 </div>
1304 <hr>
1305 <div class="refsect2" title="g_list_push_allocator ()">
1306 <a name="g-list-push-allocator"></a><h3>g_list_push_allocator ()</h3>
1307 <pre class="programlisting"><span class="returnvalue">void</span>                g_list_push_allocator               (<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> allocator);</pre>
1308 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
1309 <h3 class="title">Warning</h3>
1310 <p><code class="literal">g_list_push_allocator</code> has been deprecated since version 2.10 and should not be used in newly-written code. It does nothing, since <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> has been converted
1311                  to the <a class="link" href="glib-Memory-Slices.html" title="Memory Slices">slice
1312                  allocator</a></p>
1313 </div>
1314 <p>
1315 Sets the allocator to use to allocate <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> elements. Use
1316 <a class="link" href="glib-Doubly-Linked-Lists.html#g-list-pop-allocator" title="g_list_pop_allocator ()"><code class="function">g_list_pop_allocator()</code></a> to restore the previous allocator.
1317 </p>
1318 <p>
1319 Note that this function is not available if GLib has been compiled
1320 with <code class="option">--disable-mem-pools</code></p>
1321 <div class="variablelist"><table border="0">
1322 <col align="left" valign="top">
1323 <tbody><tr>
1324 <td><p><span class="term"><em class="parameter"><code>allocator</code></em> :</span></p></td>
1325 <td> the <a class="link" href="glib-Memory-Allocators.html#GAllocator" title="GAllocator"><span class="type">GAllocator</span></a> to use when allocating <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> elements.
1326 </td>
1327 </tr></tbody>
1328 </table></div>
1329 </div>
1330 <hr>
1331 <div class="refsect2" title="g_list_pop_allocator ()">
1332 <a name="g-list-pop-allocator"></a><h3>g_list_pop_allocator ()</h3>
1333 <pre class="programlisting"><span class="returnvalue">void</span>                g_list_pop_allocator                (void);</pre>
1334 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
1335 <h3 class="title">Warning</h3>
1336 <p><code class="literal">g_list_pop_allocator</code> has been deprecated since version 2.10 and should not be used in newly-written code. It does nothing, since <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a> has been converted
1337                  to the <a class="link" href="glib-Memory-Slices.html" title="Memory Slices">slice
1338                  allocator</a></p>
1339 </div>
1340 <p>
1341 Restores the previous <a class="link" href="glib-Memory-Allocators.html#GAllocator" title="GAllocator"><span class="type">GAllocator</span></a>, used when allocating <a class="link" href="glib-Doubly-Linked-Lists.html#GList" title="GList"><span class="type">GList</span></a>
1342 elements.
1343 </p>
1344 <p>
1345 Note that this function is not available if GLib has been compiled
1346 with <code class="option">--disable-mem-pools</code></p>
1347 </div>
1348 </div>
1349 </div>
1350 <div class="footer">
1351 <hr>
1352           Generated by GTK-Doc V1.13</div>
1353 </body>
1354 </html>