1 | /* GLIB - Library of useful routines for C programming |
2 | * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald |
3 | * |
4 | * SPDX-License-Identifier: LGPL-2.1-or-later |
5 | * |
6 | * This library is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. |
10 | * |
11 | * This library is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Lesser General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
18 | */ |
19 | |
20 | /* |
21 | * Modified by the GLib Team and others 1997-2000. See the AUTHORS |
22 | * file for a list of people on the GLib Team. See the ChangeLog |
23 | * files for a list of changes. These files are distributed with |
24 | * GLib at ftp://ftp.gtk.org/pub/gtk/. |
25 | */ |
26 | |
27 | #ifndef __G_LIST_H__ |
28 | #define __G_LIST_H__ |
29 | |
30 | #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) |
31 | #error "Only <glib.h> can be included directly." |
32 | #endif |
33 | |
34 | #include <glib/gmem.h> |
35 | #include <glib/gnode.h> |
36 | |
37 | G_BEGIN_DECLS |
38 | |
39 | typedef struct _GList GList; |
40 | |
41 | struct _GList |
42 | { |
43 | gpointer data; |
44 | GList *next; |
45 | GList *prev; |
46 | }; |
47 | |
48 | /* Doubly linked lists |
49 | */ |
50 | GLIB_AVAILABLE_IN_ALL |
51 | GList* g_list_alloc (void) G_GNUC_WARN_UNUSED_RESULT; |
52 | GLIB_AVAILABLE_IN_ALL |
53 | void g_list_free (GList *list); |
54 | GLIB_AVAILABLE_IN_ALL |
55 | void g_list_free_1 (GList *list); |
56 | #define g_list_free1 g_list_free_1 |
57 | GLIB_AVAILABLE_IN_ALL |
58 | void g_list_free_full (GList *list, |
59 | GDestroyNotify free_func); |
60 | GLIB_AVAILABLE_IN_ALL |
61 | GList* g_list_append (GList *list, |
62 | gpointer data) G_GNUC_WARN_UNUSED_RESULT; |
63 | GLIB_AVAILABLE_IN_ALL |
64 | GList* g_list_prepend (GList *list, |
65 | gpointer data) G_GNUC_WARN_UNUSED_RESULT; |
66 | GLIB_AVAILABLE_IN_ALL |
67 | GList* g_list_insert (GList *list, |
68 | gpointer data, |
69 | gint position) G_GNUC_WARN_UNUSED_RESULT; |
70 | GLIB_AVAILABLE_IN_ALL |
71 | GList* g_list_insert_sorted (GList *list, |
72 | gpointer data, |
73 | GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT; |
74 | GLIB_AVAILABLE_IN_ALL |
75 | GList* g_list_insert_sorted_with_data (GList *list, |
76 | gpointer data, |
77 | GCompareDataFunc func, |
78 | gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; |
79 | GLIB_AVAILABLE_IN_ALL |
80 | GList* g_list_insert_before (GList *list, |
81 | GList *sibling, |
82 | gpointer data) G_GNUC_WARN_UNUSED_RESULT; |
83 | GLIB_AVAILABLE_IN_2_62 |
84 | GList* g_list_insert_before_link (GList *list, |
85 | GList *sibling, |
86 | GList *link_) G_GNUC_WARN_UNUSED_RESULT; |
87 | GLIB_AVAILABLE_IN_ALL |
88 | GList* g_list_concat (GList *list1, |
89 | GList *list2) G_GNUC_WARN_UNUSED_RESULT; |
90 | GLIB_AVAILABLE_IN_ALL |
91 | GList* g_list_remove (GList *list, |
92 | gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; |
93 | GLIB_AVAILABLE_IN_ALL |
94 | GList* g_list_remove_all (GList *list, |
95 | gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; |
96 | GLIB_AVAILABLE_IN_ALL |
97 | GList* g_list_remove_link (GList *list, |
98 | GList *llink) G_GNUC_WARN_UNUSED_RESULT; |
99 | GLIB_AVAILABLE_IN_ALL |
100 | GList* g_list_delete_link (GList *list, |
101 | GList *link_) G_GNUC_WARN_UNUSED_RESULT; |
102 | GLIB_AVAILABLE_IN_ALL |
103 | GList* g_list_reverse (GList *list) G_GNUC_WARN_UNUSED_RESULT; |
104 | GLIB_AVAILABLE_IN_ALL |
105 | GList* g_list_copy (GList *list) G_GNUC_WARN_UNUSED_RESULT; |
106 | |
107 | GLIB_AVAILABLE_IN_2_34 |
108 | GList* g_list_copy_deep (GList *list, |
109 | GCopyFunc func, |
110 | gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; |
111 | |
112 | GLIB_AVAILABLE_IN_ALL |
113 | GList* g_list_nth (GList *list, |
114 | guint n); |
115 | GLIB_AVAILABLE_IN_ALL |
116 | GList* g_list_nth_prev (GList *list, |
117 | guint n); |
118 | GLIB_AVAILABLE_IN_ALL |
119 | GList* g_list_find (GList *list, |
120 | gconstpointer data); |
121 | GLIB_AVAILABLE_IN_ALL |
122 | GList* g_list_find_custom (GList *list, |
123 | gconstpointer data, |
124 | GCompareFunc func); |
125 | GLIB_AVAILABLE_IN_ALL |
126 | gint g_list_position (GList *list, |
127 | GList *llink); |
128 | GLIB_AVAILABLE_IN_ALL |
129 | gint g_list_index (GList *list, |
130 | gconstpointer data); |
131 | GLIB_AVAILABLE_IN_ALL |
132 | GList* g_list_last (GList *list); |
133 | GLIB_AVAILABLE_IN_ALL |
134 | GList* g_list_first (GList *list); |
135 | GLIB_AVAILABLE_IN_ALL |
136 | guint g_list_length (GList *list); |
137 | GLIB_AVAILABLE_IN_ALL |
138 | void g_list_foreach (GList *list, |
139 | GFunc func, |
140 | gpointer user_data); |
141 | GLIB_AVAILABLE_IN_ALL |
142 | GList* g_list_sort (GList *list, |
143 | GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT; |
144 | GLIB_AVAILABLE_IN_ALL |
145 | GList* g_list_sort_with_data (GList *list, |
146 | GCompareDataFunc compare_func, |
147 | gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; |
148 | GLIB_AVAILABLE_IN_ALL |
149 | gpointer g_list_nth_data (GList *list, |
150 | guint n); |
151 | |
152 | GLIB_AVAILABLE_IN_2_64 |
153 | void g_clear_list (GList **list_ptr, |
154 | GDestroyNotify destroy); |
155 | |
156 | #define g_clear_list(list_ptr, destroy) \ |
157 | G_STMT_START { \ |
158 | GList *_list; \ |
159 | \ |
160 | _list = *(list_ptr); \ |
161 | if (_list) \ |
162 | { \ |
163 | *list_ptr = NULL; \ |
164 | \ |
165 | if ((destroy) != NULL) \ |
166 | g_list_free_full (_list, (destroy)); \ |
167 | else \ |
168 | g_list_free (_list); \ |
169 | } \ |
170 | } G_STMT_END \ |
171 | GLIB_AVAILABLE_MACRO_IN_2_64 |
172 | |
173 | |
174 | #define g_list_previous(list) ((list) ? (((GList *)(list))->prev) : NULL) |
175 | #define g_list_next(list) ((list) ? (((GList *)(list))->next) : NULL) |
176 | |
177 | G_END_DECLS |
178 | |
179 | #endif /* __G_LIST_H__ */ |
180 | |