1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #ifndef UCX_LINKED_LIST_H
39 #define UCX_LINKED_LIST_H
40
41 #include "common.h"
42 #include "list.h"
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48
49
50
51
52 extern bool
CX_DISABLE_LINKED_LIST_SWAP_SBO;
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 CxList *cxLinkedListCreate(
68 CxAllocator
const *allocator,
69 cx_compare_func comparator,
70 size_t item_size
71 );
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 #define cxLinkedListCreateSimple(item_size) \
87 cxLinkedListCreate(
NULL,
NULL, item_size)
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 void *cx_linked_list_at(
107 void const *start,
108 size_t start_index,
109 ptrdiff_t loc_advance,
110 size_t index
111 ) __attribute__((__nonnull__));
112
113
114
115
116
117
118
119
120
121
122
123 ssize_t cx_linked_list_find(
124 void const *start,
125 ptrdiff_t loc_advance,
126 ptrdiff_t loc_data,
127 cx_compare_func cmp_func,
128 void const *elem
129 ) __attribute__((__nonnull__));
130
131
132
133
134
135
136
137
138
139
140
141
142 void *cx_linked_list_first(
143 void const *node,
144 ptrdiff_t loc_prev
145 ) __attribute__((__nonnull__));
146
147
148
149
150
151
152
153
154
155
156
157
158 void *cx_linked_list_last(
159 void const *node,
160 ptrdiff_t loc_next
161 ) __attribute__((__nonnull__));
162
163
164
165
166
167
168
169
170
171
172
173 void *cx_linked_list_prev(
174 void const *begin,
175 ptrdiff_t loc_next,
176 void const *node
177 ) __attribute__((__nonnull__));
178
179
180
181
182
183
184
185
186
187
188
189
190
191 void cx_linked_list_add(
192 void **begin,
193 void **end,
194 ptrdiff_t loc_prev,
195 ptrdiff_t loc_next,
196 void *new_node
197 ) __attribute__((__nonnull__(
5)));
198
199
200
201
202
203
204
205
206
207
208
209
210
211 void cx_linked_list_prepend(
212 void **begin,
213 void **end,
214 ptrdiff_t loc_prev,
215 ptrdiff_t loc_next,
216 void *new_node
217 ) __attribute__((__nonnull__(
5)));
218
219
220
221
222
223
224
225
226
227 void cx_linked_list_link(
228 void *left,
229 void *right,
230 ptrdiff_t loc_prev,
231 ptrdiff_t loc_next
232 ) __attribute__((__nonnull__));
233
234
235
236
237
238
239
240
241
242
243
244 void cx_linked_list_unlink(
245 void *left,
246 void *right,
247 ptrdiff_t loc_prev,
248 ptrdiff_t loc_next
249 ) __attribute__((__nonnull__));
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265 void cx_linked_list_insert(
266 void **begin,
267 void **end,
268 ptrdiff_t loc_prev,
269 ptrdiff_t loc_next,
270 void *node,
271 void *new_node
272 ) __attribute__((__nonnull__(
6)));
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294 void cx_linked_list_insert_chain(
295 void **begin,
296 void **end,
297 ptrdiff_t loc_prev,
298 ptrdiff_t loc_next,
299 void *node,
300 void *insert_begin,
301 void *insert_end
302 ) __attribute__((__nonnull__(
6)));
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323 void cx_linked_list_remove(
324 void **begin,
325 void **end,
326 ptrdiff_t loc_prev,
327 ptrdiff_t loc_next,
328 void *node
329 ) __attribute__((__nonnull__(
5)));
330
331
332
333
334
335
336
337
338 size_t cx_linked_list_size(
339 void const *node,
340 ptrdiff_t loc_next
341 );
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365 void cx_linked_list_sort(
366 void **begin,
367 void **end,
368 ptrdiff_t loc_prev,
369 ptrdiff_t loc_next,
370 ptrdiff_t loc_data,
371 cx_compare_func cmp_func
372 ) __attribute__((__nonnull__(
1,
6)));
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388 int cx_linked_list_compare(
389 void const *begin_left,
390 void const *begin_right,
391 ptrdiff_t loc_advance,
392 ptrdiff_t loc_data,
393 cx_compare_func cmp_func
394 ) __attribute__((__nonnull__(
5)));
395
396
397
398
399
400
401
402
403
404 void cx_linked_list_reverse(
405 void **begin,
406 void **end,
407 ptrdiff_t loc_prev,
408 ptrdiff_t loc_next
409 ) __attribute__((__nonnull__(
1)));
410
411 #ifdef __cplusplus
412 }
413 #endif
414
415 #endif
416