Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
ftlist.h
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * ftlist.h
4 *
5 * Generic list support for FreeType (specification).
6 *
7 * Copyright (C) 1996-2024 by
8 * David Turner, Robert Wilhelm, and Werner Lemberg.
9 *
10 * This file is part of the FreeType project, and may only be used,
11 * modified, and distributed under the terms of the FreeType project
12 * license, LICENSE.TXT. By continuing to use, modify, or distribute
13 * this file you indicate that you have read the license and
14 * understand and accept it fully.
15 *
16 */
17
18
19 /**************************************************************************
20 *
21 * This file implements functions relative to list processing. Its data
22 * structures are defined in `freetype.h`.
23 *
24 */
25
26
27#ifndef FTLIST_H_
28#define FTLIST_H_
29
30
31#include <freetype/freetype.h>
32
33#ifdef FREETYPE_H
34#error "freetype.h of FreeType 1 has been loaded!"
35#error "Please fix the directory search order for header files"
36#error "so that freetype.h of FreeType 2 is found first."
37#endif
38
39
41
42
43 /**************************************************************************
44 *
45 * @section:
46 * list_processing
47 *
48 * @title:
49 * List Processing
50 *
51 * @abstract:
52 * Simple management of lists.
53 *
54 * @description:
55 * This section contains various definitions related to list processing
56 * using doubly-linked nodes.
57 *
58 * @order:
59 * FT_List
60 * FT_ListNode
61 * FT_ListRec
62 * FT_ListNodeRec
63 *
64 * FT_List_Add
65 * FT_List_Insert
66 * FT_List_Find
67 * FT_List_Remove
68 * FT_List_Up
69 * FT_List_Iterate
70 * FT_List_Iterator
71 * FT_List_Finalize
72 * FT_List_Destructor
73 *
74 */
75
76
77 /**************************************************************************
78 *
79 * @function:
80 * FT_List_Find
81 *
82 * @description:
83 * Find the list node for a given listed object.
84 *
85 * @input:
86 * list ::
87 * A pointer to the parent list.
88 * data ::
89 * The address of the listed object.
90 *
91 * @return:
92 * List node. `NULL` if it wasn't found.
93 */
96 void* data );
97
98
99 /**************************************************************************
100 *
101 * @function:
102 * FT_List_Add
103 *
104 * @description:
105 * Append an element to the end of a list.
106 *
107 * @inout:
108 * list ::
109 * A pointer to the parent list.
110 * node ::
111 * The node to append.
112 */
113 FT_EXPORT( void )
115 FT_ListNode node );
116
117
118 /**************************************************************************
119 *
120 * @function:
121 * FT_List_Insert
122 *
123 * @description:
124 * Insert an element at the head of a list.
125 *
126 * @inout:
127 * list ::
128 * A pointer to parent list.
129 * node ::
130 * The node to insert.
131 */
132 FT_EXPORT( void )
134 FT_ListNode node );
135
136
137 /**************************************************************************
138 *
139 * @function:
140 * FT_List_Remove
141 *
142 * @description:
143 * Remove a node from a list. This function doesn't check whether the
144 * node is in the list!
145 *
146 * @input:
147 * node ::
148 * The node to remove.
149 *
150 * @inout:
151 * list ::
152 * A pointer to the parent list.
153 */
154 FT_EXPORT( void )
156 FT_ListNode node );
157
158
159 /**************************************************************************
160 *
161 * @function:
162 * FT_List_Up
163 *
164 * @description:
165 * Move a node to the head/top of a list. Used to maintain LRU lists.
166 *
167 * @inout:
168 * list ::
169 * A pointer to the parent list.
170 * node ::
171 * The node to move.
172 */
173 FT_EXPORT( void )
175 FT_ListNode node );
176
177
178 /**************************************************************************
179 *
180 * @functype:
181 * FT_List_Iterator
182 *
183 * @description:
184 * An FT_List iterator function that is called during a list parse by
185 * @FT_List_Iterate.
186 *
187 * @input:
188 * node ::
189 * The current iteration list node.
190 *
191 * user ::
192 * A typeless pointer passed to @FT_List_Iterate. Can be used to point
193 * to the iteration's state.
194 */
195 typedef FT_Error
197 void* user );
198
199
200 /**************************************************************************
201 *
202 * @function:
203 * FT_List_Iterate
204 *
205 * @description:
206 * Parse a list and calls a given iterator function on each element.
207 * Note that parsing is stopped as soon as one of the iterator calls
208 * returns a non-zero value.
209 *
210 * @input:
211 * list ::
212 * A handle to the list.
213 * iterator ::
214 * An iterator function, called on each node of the list.
215 * user ::
216 * A user-supplied field that is passed as the second argument to the
217 * iterator.
218 *
219 * @return:
220 * The result (a FreeType error code) of the last iterator call.
221 */
224 FT_List_Iterator iterator,
225 void* user );
226
227
228 /**************************************************************************
229 *
230 * @functype:
231 * FT_List_Destructor
232 *
233 * @description:
234 * An @FT_List iterator function that is called during a list
235 * finalization by @FT_List_Finalize to destroy all elements in a given
236 * list.
237 *
238 * @input:
239 * system ::
240 * The current system object.
241 *
242 * data ::
243 * The current object to destroy.
244 *
245 * user ::
246 * A typeless pointer passed to @FT_List_Iterate. It can be used to
247 * point to the iteration's state.
248 */
249 typedef void
250 (*FT_List_Destructor)( FT_Memory memory,
251 void* data,
252 void* user );
253
254
255 /**************************************************************************
256 *
257 * @function:
258 * FT_List_Finalize
259 *
260 * @description:
261 * Destroy all elements in the list as well as the list itself.
262 *
263 * @input:
264 * list ::
265 * A handle to the list.
266 *
267 * destroy ::
268 * A list destructor that will be applied to each element of the list.
269 * Set this to `NULL` if not needed.
270 *
271 * memory ::
272 * The current memory object that handles deallocation.
273 *
274 * user ::
275 * A user-supplied field that is passed as the last argument to the
276 * destructor.
277 *
278 * @note:
279 * This function expects that all nodes added by @FT_List_Add or
280 * @FT_List_Insert have been dynamically allocated.
281 */
282 FT_EXPORT( void )
284 FT_List_Destructor destroy,
285 FT_Memory memory,
286 void* user );
287
288 /* */
289
290
292
293#endif /* FTLIST_H_ */
294
295
296/* END */
#define FT_END_HEADER
Definition ftheader.h:57
#define FT_BEGIN_HEADER
Definition ftheader.h:37
FT_List_Up(FT_List list, FT_ListNode node)
FT_Error(* FT_List_Iterator)(FT_ListNode node, void *user)
Definition ftlist.h:196
void(* FT_List_Destructor)(FT_Memory memory, void *data, void *user)
Definition ftlist.h:250
FT_List_Insert(FT_List list, FT_ListNode node)
FT_List_Finalize(FT_List list, FT_List_Destructor destroy, FT_Memory memory, void *user)
FT_List_Remove(FT_List list, FT_ListNode node)
FT_BEGIN_HEADER FT_List_Find(FT_List list, void *data)
FT_List_Iterate(FT_List list, FT_List_Iterator iterator, void *user)
FT_List_Add(FT_List list, FT_ListNode node)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition ftsystem.h:64
int FT_Error
Definition fttypes.h:302
#define FT_EXPORT(x)