C Container Collection (CCC)
Loading...
Searching...
No Matches
private_traits.h
1
16
#ifndef CCC_PRIVATE_TRAITS_H
17
#define CCC_PRIVATE_TRAITS_H
18
19
/* NOLINTBEGIN */
20
#include "../adaptive_map.h"
/* IWYU pragma: keep */
21
#include "../array_adaptive_map.h"
/* IWYU pragma: keep */
22
#include "../array_tree_map.h"
/* IWYU pragma: keep */
23
#include "../bitset.h"
/* IWYU pragma: keep */
24
#include "../buffer.h"
/* IWYU pragma: keep */
25
#include "../doubly_linked_list.h"
/* IWYU pragma: keep */
26
#include "../flat_double_ended_queue.h"
/* IWYU pragma: keep */
27
#include "../flat_hash_map.h"
/* IWYU pragma: keep */
28
#include "../flat_priority_queue.h"
/* IWYU pragma: keep */
29
#include "../priority_queue.h"
/* IWYU pragma: keep */
30
#include "../singly_linked_list.h"
/* IWYU pragma: keep */
31
#include "../tree_map.h"
/* IWYU pragma: keep */
32
#include "../types.h"
/* IWYU pragma: keep */
33
/* NOLINTEND */
34
35
// clang-format off
36
37
/*==================== Entry/Handle Interface =========================*/
38
39
#define CCC_private_swap_entry(container_pointer, swap_arguments...) \
40
_Generic((container_pointer), \
41
CCC_Flat_hash_map *: CCC_flat_hash_map_swap_entry, \
42
CCC_Adaptive_map *: CCC_adaptive_map_swap_entry, \
43
CCC_Tree_map *: CCC_tree_map_swap_entry)((container_pointer), \
44
swap_arguments)
45
46
#define CCC_private_swap_handle(container_pointer, swap_arguments...) \
47
_Generic((container_pointer), \
48
CCC_Array_adaptive_map *: CCC_array_adaptive_map_swap_handle, \
49
CCC_Array_tree_map *: CCC_array_tree_map_swap_handle)( \
50
(container_pointer), swap_arguments \
51
)
52
53
#define CCC_private_try_insert(container_pointer, try_insert_arguments...) \
54
_Generic((container_pointer), \
55
CCC_Array_adaptive_map *: CCC_array_adaptive_map_try_insert, \
56
CCC_Array_tree_map *: CCC_array_tree_map_try_insert, \
57
CCC_Flat_hash_map *: CCC_flat_hash_map_try_insert, \
58
CCC_Adaptive_map *: CCC_adaptive_map_try_insert, \
59
CCC_Tree_map *: CCC_tree_map_try_insert)((container_pointer), \
60
try_insert_arguments)
61
62
#define CCC_private_insert_or_assign(container_pointer, \
63
insert_or_assign_arguments...) \
64
_Generic((container_pointer), \
65
CCC_Array_adaptive_map *: CCC_array_adaptive_map_insert_or_assign, \
66
CCC_Array_tree_map *: CCC_array_tree_map_insert_or_assign, \
67
CCC_Flat_hash_map *: CCC_flat_hash_map_insert_or_assign, \
68
CCC_Adaptive_map *: CCC_adaptive_map_insert_or_assign, \
69
CCC_Tree_map *: CCC_tree_map_insert_or_assign)( \
70
(container_pointer), insert_or_assign_arguments \
71
)
72
73
#define CCC_private_remove_key_value(container_pointer, \
74
key_val_container_array_pointer...) \
75
_Generic((container_pointer), \
76
CCC_Array_adaptive_map *: CCC_array_adaptive_map_remove_key_value, \
77
CCC_Array_tree_map *: CCC_array_tree_map_remove_key_value, \
78
CCC_Flat_hash_map *: CCC_flat_hash_map_remove_key_value, \
79
CCC_Adaptive_map *: CCC_adaptive_map_remove_key_value, \
80
CCC_Tree_map *: CCC_tree_map_remove_key_value)( \
81
(container_pointer), key_val_container_array_pointer \
82
)
83
84
#define CCC_private_remove_entry(container_entry_pointer, \
85
...) \
86
_Generic((container_entry_pointer), \
87
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_remove_entry, \
88
CCC_Adaptive_map_entry *: CCC_adaptive_map_remove_entry, \
89
CCC_Tree_map_entry *: CCC_tree_map_remove_entry, \
90
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_remove_entry, \
91
CCC_Adaptive_map_entry const *: CCC_adaptive_map_remove_entry, \
92
CCC_Tree_map_entry const *: CCC_tree_map_remove_entry)( \
93
(container_entry_pointer) __VA_OPT__(, __VA_ARGS__) \
94
)
95
96
#define CCC_private_remove_handle(container_array_pointer) \
97
_Generic((container_array_pointer), \
98
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_remove_handle, \
99
CCC_Array_adaptive_map_handle const \
100
*: CCC_array_adaptive_map_remove_handle, \
101
CCC_Array_tree_map_handle *: CCC_array_tree_map_remove_handle, \
102
CCC_Array_tree_map_handle const *: CCC_array_tree_map_remove_handle)( \
103
(container_array_pointer) \
104
)
105
106
#define CCC_private_entry(container_pointer, key_pointer, ...) \
107
_Generic((container_pointer), \
108
CCC_Flat_hash_map *: CCC_flat_hash_map_entry, \
109
CCC_Flat_hash_map const *: CCC_flat_hash_map_entry, \
110
CCC_Adaptive_map *: CCC_adaptive_map_entry, \
111
CCC_Tree_map *: CCC_tree_map_entry, \
112
CCC_Tree_map const *: CCC_tree_map_entry)( \
113
(container_pointer), key_pointer __VA_OPT__(, __VA_ARGS__) \
114
)
115
116
#define CCC_private_handle(container_pointer, key_pointer...) \
117
_Generic((container_pointer), \
118
CCC_Array_adaptive_map *: CCC_array_adaptive_map_handle, \
119
CCC_Array_tree_map *: CCC_array_tree_map_handle, \
120
CCC_Array_tree_map const *: CCC_array_tree_map_handle)( \
121
(container_pointer), key_pointer \
122
)
123
124
#define CCC_private_and_modify(container_entry_pointer, modifier_pointer...) \
125
_Generic((container_entry_pointer), \
126
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_and_modify, \
127
CCC_Adaptive_map_entry *: CCC_adaptive_map_and_modify, \
128
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_and_modify, \
129
CCC_Tree_map_entry *: CCC_tree_map_and_modify, \
130
CCC_Array_tree_map_handle *: CCC_array_tree_map_and_modify, \
131
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_and_modify, \
132
CCC_Array_tree_map_handle const *: CCC_array_tree_map_and_modify, \
133
CCC_Adaptive_map_entry const *: CCC_adaptive_map_and_modify, \
134
CCC_Array_adaptive_map_handle const \
135
*: CCC_array_adaptive_map_and_modify, \
136
CCC_Tree_map_entry const *: CCC_tree_map_and_modify)( \
137
(container_entry_pointer), modifier_pointer \
138
)
139
140
#define CCC_private_insert_entry(container_entry_pointer, \
141
key_val_container_array_pointer...) \
142
_Generic((container_entry_pointer), \
143
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_insert_entry, \
144
CCC_Adaptive_map_entry *: CCC_adaptive_map_insert_entry, \
145
CCC_Tree_map_entry *: CCC_tree_map_insert_entry, \
146
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_insert_entry, \
147
CCC_Adaptive_map_entry const *: CCC_adaptive_map_insert_entry, \
148
CCC_Tree_map_entry const *: CCC_tree_map_insert_entry)( \
149
(container_entry_pointer), key_val_container_array_pointer \
150
)
151
152
#define CCC_private_insert_handle(container_array_pointer, \
153
key_val_container_array_pointer...) \
154
_Generic((container_array_pointer), \
155
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_insert_handle, \
156
CCC_Array_adaptive_map_handle const \
157
*: CCC_array_adaptive_map_insert_handle, \
158
CCC_Array_tree_map_handle *: CCC_array_tree_map_insert_handle, \
159
CCC_Array_tree_map_handle const *: CCC_array_tree_map_insert_handle)( \
160
(container_array_pointer), key_val_container_array_pointer \
161
)
162
163
#define CCC_private_or_insert(container_entry_pointer, \
164
key_val_container_array_pointer...) \
165
_Generic((container_entry_pointer), \
166
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_or_insert, \
167
CCC_Adaptive_map_entry *: CCC_adaptive_map_or_insert, \
168
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_or_insert, \
169
CCC_Tree_map_entry *: CCC_tree_map_or_insert, \
170
CCC_Array_tree_map_handle *: CCC_array_tree_map_or_insert, \
171
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_or_insert, \
172
CCC_Adaptive_map_entry const *: CCC_adaptive_map_or_insert, \
173
CCC_Array_tree_map_handle const *: CCC_array_tree_map_or_insert, \
174
CCC_Array_adaptive_map_handle const \
175
*: CCC_array_adaptive_map_or_insert, \
176
CCC_Tree_map_entry const *: CCC_tree_map_or_insert)( \
177
(container_entry_pointer), key_val_container_array_pointer \
178
)
179
180
#define CCC_private_unwrap(container_entry_pointer) \
181
_Generic((container_entry_pointer), \
182
CCC_Entry *: CCC_entry_unwrap, \
183
CCC_Entry const *: CCC_entry_unwrap, \
184
CCC_Handle *: CCC_handle_unwrap, \
185
CCC_Handle const *: CCC_handle_unwrap, \
186
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_unwrap, \
187
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_unwrap, \
188
CCC_Adaptive_map_entry *: CCC_adaptive_map_unwrap, \
189
CCC_Adaptive_map_entry const *: CCC_adaptive_map_unwrap, \
190
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_unwrap, \
191
CCC_Array_adaptive_map_handle const *: CCC_array_adaptive_map_unwrap, \
192
CCC_Array_tree_map_handle *: CCC_array_tree_map_unwrap, \
193
CCC_Array_tree_map_handle const *: CCC_array_tree_map_unwrap, \
194
CCC_Tree_map_entry *: CCC_tree_map_unwrap, \
195
CCC_Tree_map_entry const *: CCC_tree_map_unwrap)( \
196
(container_entry_pointer) \
197
)
198
199
#define CCC_private_occupied(container_entry_pointer) \
200
_Generic((container_entry_pointer), \
201
CCC_Entry *: CCC_entry_occupied, \
202
CCC_Entry const *: CCC_entry_occupied, \
203
CCC_Handle *: CCC_handle_occupied, \
204
CCC_Handle const *: CCC_handle_occupied, \
205
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_occupied, \
206
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_occupied, \
207
CCC_Adaptive_map_entry *: CCC_adaptive_map_occupied, \
208
CCC_Adaptive_map_entry const *: CCC_adaptive_map_occupied, \
209
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_occupied, \
210
CCC_Array_adaptive_map_handle const \
211
*: CCC_array_adaptive_map_occupied, \
212
CCC_Array_tree_map_handle *: CCC_array_tree_map_occupied, \
213
CCC_Array_tree_map_handle const *: CCC_array_tree_map_occupied, \
214
CCC_Tree_map_entry *: CCC_tree_map_occupied, \
215
CCC_Tree_map_entry const *: CCC_tree_map_occupied)( \
216
(container_entry_pointer) \
217
)
218
219
#define CCC_private_insert_error(container_entry_pointer) \
220
_Generic((container_entry_pointer), \
221
CCC_Entry *: CCC_entry_insert_error, \
222
CCC_Entry const *: CCC_entry_insert_error, \
223
CCC_Handle *: CCC_handle_insert_error, \
224
CCC_Handle const *: CCC_handle_insert_error, \
225
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_insert_error, \
226
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_insert_error, \
227
CCC_Adaptive_map_entry *: CCC_adaptive_map_insert_error, \
228
CCC_Adaptive_map_entry const *: CCC_adaptive_map_insert_error, \
229
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_insert_error, \
230
CCC_Array_adaptive_map_handle const \
231
*: CCC_array_adaptive_map_insert_error, \
232
CCC_Array_tree_map_handle *: CCC_array_tree_map_insert_error, \
233
CCC_Array_tree_map_handle const *: CCC_array_tree_map_insert_error, \
234
CCC_Tree_map_entry *: CCC_tree_map_insert_error, \
235
CCC_Tree_map_entry const *: CCC_tree_map_insert_error)( \
236
(container_entry_pointer) \
237
)
238
239
/*====================== Misc Search Interface ===========================*/
240
241
#define CCC_private_get_key_value(container_pointer, key_pointer...) \
242
_Generic((container_pointer), \
243
CCC_Flat_hash_map *: CCC_flat_hash_map_get_key_value, \
244
CCC_Flat_hash_map const *: CCC_flat_hash_map_get_key_value, \
245
CCC_Adaptive_map *: CCC_adaptive_map_get_key_value, \
246
CCC_Array_adaptive_map *: CCC_array_adaptive_map_get_key_value, \
247
CCC_Array_tree_map *: CCC_array_tree_map_get_key_value, \
248
CCC_Array_tree_map const *: CCC_array_tree_map_get_key_value, \
249
CCC_Tree_map *: CCC_tree_map_get_key_value, \
250
CCC_Tree_map const *: CCC_tree_map_get_key_value)((container_pointer), \
251
key_pointer)
252
253
#define CCC_private_contains(container_pointer, key_pointer...) \
254
_Generic((container_pointer), \
255
CCC_Flat_hash_map *: CCC_flat_hash_map_contains, \
256
CCC_Flat_hash_map const *: CCC_flat_hash_map_contains, \
257
CCC_Adaptive_map *: CCC_adaptive_map_contains, \
258
CCC_Array_adaptive_map *: CCC_array_adaptive_map_contains, \
259
CCC_Array_tree_map *: CCC_array_tree_map_contains, \
260
CCC_Array_tree_map const *: CCC_array_tree_map_contains, \
261
CCC_Tree_map *: CCC_tree_map_contains, \
262
CCC_Tree_map const *: CCC_tree_map_contains)((container_pointer), \
263
key_pointer)
264
265
/*================ Sequential Containers Interface =====================*/
266
267
#define CCC_private_push(container_pointer, container_array_pointer...) \
268
_Generic((container_pointer), \
269
CCC_Flat_priority_queue *: CCC_flat_priority_queue_push, \
270
CCC_Priority_queue *: CCC_priority_queue_push)( \
271
(container_pointer), container_array_pointer \
272
)
273
274
#define CCC_private_push_back(container_pointer, container_array_pointer...) \
275
_Generic((container_pointer), \
276
CCC_Bitset *: CCC_bitset_push_back, \
277
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_push_back, \
278
CCC_Doubly_linked_list *: CCC_doubly_linked_list_push_back, \
279
CCC_Buffer *: CCC_buffer_push_back)((container_pointer), \
280
container_array_pointer)
281
282
#define CCC_private_push_front(container_pointer, container_array_pointer...) \
283
_Generic((container_pointer), \
284
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_push_front, \
285
CCC_Doubly_linked_list *: CCC_doubly_linked_list_push_front, \
286
CCC_Singly_linked_list *: CCC_singly_linked_list_push_front)( \
287
(container_pointer), container_array_pointer \
288
)
289
290
#define CCC_private_pop(container_pointer, ...) \
291
_Generic((container_pointer), \
292
CCC_Flat_priority_queue *: CCC_flat_priority_queue_pop, \
293
CCC_Priority_queue *: CCC_priority_queue_pop)( \
294
(container_pointer)__VA_OPT__(, __VA_ARGS__) \
295
)
296
297
#define CCC_private_pop_front(container_pointer, ...) \
298
_Generic((container_pointer), \
299
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_pop_front, \
300
CCC_Doubly_linked_list *: CCC_doubly_linked_list_pop_front, \
301
CCC_Singly_linked_list *: CCC_singly_linked_list_pop_front)( \
302
(container_pointer)__VA_OPT__(, __VA_ARGS__) \
303
)
304
305
#define CCC_private_pop_back(container_pointer, ...) \
306
_Generic((container_pointer), \
307
CCC_Bitset *: CCC_bitset_pop_back, \
308
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_pop_back, \
309
CCC_Doubly_linked_list *: CCC_doubly_linked_list_pop_back, \
310
CCC_Buffer *: CCC_buffer_pop_back)( \
311
(container_pointer)__VA_OPT__(, __VA_ARGS__) \
312
)
313
314
#define CCC_private_front(container_pointer) \
315
_Generic((container_pointer), \
316
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_front, \
317
CCC_Doubly_linked_list *: CCC_doubly_linked_list_front, \
318
CCC_Flat_priority_queue *: CCC_flat_priority_queue_front, \
319
CCC_Priority_queue *: CCC_priority_queue_front, \
320
CCC_Singly_linked_list *: CCC_singly_linked_list_front, \
321
CCC_Flat_double_ended_queue const \
322
*: CCC_flat_double_ended_queue_front, \
323
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_front, \
324
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_front, \
325
CCC_Priority_queue const *: CCC_priority_queue_front, \
326
CCC_Singly_linked_list const *: CCC_singly_linked_list_front)( \
327
(container_pointer) \
328
)
329
330
#define CCC_private_back(container_pointer) \
331
_Generic((container_pointer), \
332
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_back, \
333
CCC_Doubly_linked_list *: CCC_doubly_linked_list_back, \
334
CCC_Buffer *: CCC_buffer_back, \
335
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_back, \
336
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_back, \
337
CCC_Buffer const *: CCC_buffer_back)((container_pointer))
338
339
/*================ Priority Queue Update Interface =====================*/
340
341
#define CCC_private_update(container_pointer, update_arguments...) \
342
_Generic((container_pointer), \
343
CCC_Flat_priority_queue *: CCC_flat_priority_queue_update, \
344
CCC_Priority_queue *: CCC_priority_queue_update)((container_pointer), \
345
update_arguments)
346
347
#define CCC_private_increase(container_pointer, increase_arguments...) \
348
_Generic((container_pointer), \
349
CCC_Flat_priority_queue *: CCC_flat_priority_queue_increase, \
350
CCC_Priority_queue *: CCC_priority_queue_increase)( \
351
(container_pointer), increase_arguments \
352
)
353
354
#define CCC_private_decrease(container_pointer, decrease_arguments...) \
355
_Generic((container_pointer), \
356
CCC_Flat_priority_queue *: CCC_flat_priority_queue_decrease, \
357
CCC_Priority_queue *: CCC_priority_queue_decrease)( \
358
(container_pointer), decrease_arguments \
359
)
360
361
#define CCC_private_extract(container_pointer, container_array_pointer...) \
362
_Generic((container_pointer), \
363
CCC_Doubly_linked_list *: CCC_doubly_linked_list_extract, \
364
CCC_Singly_linked_list *: CCC_singly_linked_list_extract, \
365
CCC_Priority_queue *: CCC_priority_queue_extract)( \
366
(container_pointer), container_array_pointer \
367
)
368
369
#define CCC_private_erase(container_pointer, container_array_pointer...) \
370
_Generic((container_pointer), \
371
CCC_Flat_priority_queue *: CCC_flat_priority_queue_erase)( \
372
(container_pointer), container_array_pointer \
373
)
374
375
#define CCC_private_extract_range(container_pointer, \
376
container_array_begin_end_pointer...) \
377
_Generic((container_pointer), \
378
CCC_Doubly_linked_list *: CCC_doubly_linked_list_extract_range, \
379
CCC_Singly_linked_list *: CCC_singly_linked_list_extract_range)( \
380
(container_pointer), container_array_begin_end_pointer \
381
)
382
383
/*=================== Iterators Interface ==============================*/
384
385
#define CCC_private_begin(container_pointer) \
386
_Generic((container_pointer), \
387
CCC_Buffer *: CCC_buffer_begin, \
388
CCC_Flat_hash_map *: CCC_flat_hash_map_begin, \
389
CCC_Adaptive_map *: CCC_adaptive_map_begin, \
390
CCC_Array_adaptive_map *: CCC_array_adaptive_map_begin, \
391
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_begin, \
392
CCC_Singly_linked_list *: CCC_singly_linked_list_begin, \
393
CCC_Doubly_linked_list *: CCC_doubly_linked_list_begin, \
394
CCC_Tree_map *: CCC_tree_map_begin, \
395
CCC_Array_tree_map *: CCC_array_tree_map_begin, \
396
CCC_Buffer const *: CCC_buffer_begin, \
397
CCC_Flat_hash_map const *: CCC_flat_hash_map_begin, \
398
CCC_Adaptive_map const *: CCC_adaptive_map_begin, \
399
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_begin, \
400
CCC_Flat_double_ended_queue const \
401
*: CCC_flat_double_ended_queue_begin, \
402
CCC_Singly_linked_list const *: CCC_singly_linked_list_begin, \
403
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_begin, \
404
CCC_Array_tree_map const *: CCC_array_tree_map_begin, \
405
CCC_Tree_map const *: CCC_tree_map_begin)((container_pointer))
406
407
#define CCC_private_reverse_begin(container_pointer) \
408
_Generic((container_pointer), \
409
CCC_Buffer *: CCC_buffer_reverse_begin, \
410
CCC_Adaptive_map *: CCC_adaptive_map_reverse_begin, \
411
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_begin, \
412
CCC_Flat_double_ended_queue \
413
*: CCC_flat_double_ended_queue_reverse_begin, \
414
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_begin, \
415
CCC_Tree_map *: CCC_tree_map_reverse_begin, \
416
CCC_Array_tree_map *: CCC_array_tree_map_reverse_begin, \
417
CCC_Buffer const *: CCC_buffer_reverse_begin, \
418
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_begin, \
419
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_begin, \
420
CCC_Flat_double_ended_queue const \
421
*: CCC_flat_double_ended_queue_reverse_begin, \
422
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_begin, \
423
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_begin, \
424
CCC_Tree_map const *: CCC_tree_map_reverse_begin)((container_pointer))
425
426
#define CCC_private_next(container_pointer, void_iterator_pointer) \
427
_Generic((container_pointer), \
428
CCC_Buffer *: CCC_buffer_next, \
429
CCC_Flat_hash_map *: CCC_flat_hash_map_next, \
430
CCC_Adaptive_map *: CCC_adaptive_map_next, \
431
CCC_Array_adaptive_map *: CCC_array_adaptive_map_next, \
432
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_next, \
433
CCC_Singly_linked_list *: CCC_singly_linked_list_next, \
434
CCC_Doubly_linked_list *: CCC_doubly_linked_list_next, \
435
CCC_Tree_map *: CCC_tree_map_next, \
436
CCC_Array_tree_map *: CCC_array_tree_map_next, \
437
CCC_Buffer const *: CCC_buffer_next, \
438
CCC_Flat_hash_map const *: CCC_flat_hash_map_next, \
439
CCC_Adaptive_map const *: CCC_adaptive_map_next, \
440
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_next, \
441
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_next, \
442
CCC_Singly_linked_list const *: CCC_singly_linked_list_next, \
443
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_next, \
444
CCC_Array_tree_map const *: CCC_array_tree_map_next, \
445
CCC_Tree_map const *: CCC_tree_map_next)((container_pointer), \
446
(void_iterator_pointer))
447
448
#define CCC_private_reverse_next(container_pointer, void_iterator_pointer) \
449
_Generic((container_pointer), \
450
CCC_Buffer *: CCC_buffer_reverse_next, \
451
CCC_Adaptive_map *: CCC_adaptive_map_reverse_next, \
452
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_next, \
453
CCC_Flat_double_ended_queue \
454
*: CCC_flat_double_ended_queue_reverse_next, \
455
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_next, \
456
CCC_Tree_map *: CCC_tree_map_reverse_next, \
457
CCC_Array_tree_map *: CCC_array_tree_map_reverse_next, \
458
CCC_Buffer const *: CCC_buffer_reverse_next, \
459
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_next, \
460
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_next, \
461
CCC_Flat_double_ended_queue const \
462
*: CCC_flat_double_ended_queue_reverse_next, \
463
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_next, \
464
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_next, \
465
CCC_Tree_map const *: CCC_tree_map_reverse_next)( \
466
(container_pointer), (void_iterator_pointer) \
467
)
468
469
#define CCC_private_end(container_pointer) \
470
_Generic((container_pointer), \
471
CCC_Buffer *: CCC_buffer_end, \
472
CCC_Flat_hash_map *: CCC_flat_hash_map_end, \
473
CCC_Adaptive_map *: CCC_adaptive_map_end, \
474
CCC_Array_adaptive_map *: CCC_array_adaptive_map_end, \
475
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_end, \
476
CCC_Singly_linked_list *: CCC_singly_linked_list_end, \
477
CCC_Doubly_linked_list *: CCC_doubly_linked_list_end, \
478
CCC_Tree_map *: CCC_tree_map_end, \
479
CCC_Array_tree_map *: CCC_array_tree_map_end, \
480
CCC_Buffer const *: CCC_buffer_end, \
481
CCC_Flat_hash_map const *: CCC_flat_hash_map_end, \
482
CCC_Adaptive_map const *: CCC_adaptive_map_end, \
483
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_end, \
484
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_end, \
485
CCC_Singly_linked_list const *: CCC_singly_linked_list_end, \
486
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_end, \
487
CCC_Array_tree_map const *: CCC_array_tree_map_end, \
488
CCC_Tree_map const *: CCC_tree_map_end)((container_pointer))
489
490
#define CCC_private_reverse_end(container_pointer) \
491
_Generic((container_pointer), \
492
CCC_Buffer *: CCC_buffer_reverse_end, \
493
CCC_Adaptive_map *: CCC_adaptive_map_reverse_end, \
494
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_end, \
495
CCC_Flat_double_ended_queue \
496
*: CCC_flat_double_ended_queue_reverse_end, \
497
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_end, \
498
CCC_Tree_map *: CCC_tree_map_reverse_end, \
499
CCC_Array_tree_map *: CCC_array_tree_map_reverse_end, \
500
CCC_Buffer const *: CCC_buffer_reverse_end, \
501
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_end, \
502
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_end, \
503
CCC_Flat_double_ended_queue const \
504
*: CCC_flat_double_ended_queue_reverse_end, \
505
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_end, \
506
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_end, \
507
CCC_Tree_map const *: CCC_tree_map_reverse_end)((container_pointer))
508
509
#define CCC_private_equal_range(container_pointer, \
510
begin_and_end_key_pointer...) \
511
_Generic((container_pointer), \
512
CCC_Adaptive_map *: CCC_adaptive_map_equal_range, \
513
CCC_Array_adaptive_map *: CCC_array_adaptive_map_equal_range, \
514
CCC_Array_tree_map *: CCC_array_tree_map_equal_range, \
515
CCC_Array_tree_map const *: CCC_array_tree_map_equal_range, \
516
CCC_Tree_map *: CCC_tree_map_equal_range, \
517
CCC_Tree_map const *: CCC_tree_map_equal_range)( \
518
(container_pointer), begin_and_end_key_pointer \
519
)
520
521
#define CCC_private_equal_range_reverse( \
522
container_pointer, reverse_begin_and_reverse_end_key_pointer... \
523
) \
524
_Generic((container_pointer), \
525
CCC_Adaptive_map *: CCC_adaptive_map_equal_range_reverse, \
526
CCC_Array_adaptive_map *: CCC_array_adaptive_map_equal_range_reverse, \
527
CCC_Array_tree_map *: CCC_array_tree_map_equal_range_reverse, \
528
CCC_Array_tree_map const *: CCC_array_tree_map_equal_range_reverse, \
529
CCC_Tree_map *: CCC_tree_map_equal_range_reverse, \
530
CCC_Tree_map const *: CCC_tree_map_equal_range_reverse)( \
531
(container_pointer), reverse_begin_and_reverse_end_key_pointer \
532
)
533
538
#ifdef range_begin
539
# undef range_begin
540
#endif
541
#ifdef range_end
542
# undef range_end
543
#endif
544
#ifdef range_reverse_begin
545
# undef range_reverse_begin
546
#endif
547
#ifdef range_reverse_end
548
# undef range_reverse_end
549
#endif
550
551
#define CCC_private_range_begin(range_pointer) \
552
_Generic((range_pointer), \
553
CCC_Range *: CCC_range_begin, \
554
CCC_Range const *: CCC_range_begin, \
555
CCC_Handle_range *: CCC_handle_range_begin, \
556
CCC_Handle_range const *: CCC_handle_range_begin)((range_pointer))
557
558
#define CCC_private_range_end(range_pointer) \
559
_Generic((range_pointer), \
560
CCC_Range *: CCC_range_end, \
561
CCC_Range const *: CCC_range_end, \
562
CCC_Handle_range *: CCC_handle_range_end, \
563
CCC_Handle_range const *: CCC_handle_range_end)((range_pointer))
564
565
#define CCC_private_range_reverse_begin(range_reverse_pointer) \
566
_Generic((range_reverse_pointer), \
567
CCC_Range_reverse *: CCC_range_reverse_begin, \
568
CCC_Range_reverse const *: CCC_range_reverse_begin, \
569
CCC_Handle_range_reverse *: CCC_handle_range_reverse_begin, \
570
CCC_Handle_range_reverse const *: CCC_handle_range_reverse_begin)( \
571
(range_reverse_pointer) \
572
)
573
574
#define CCC_private_range_reverse_end(range_reverse_pointer) \
575
_Generic((range_reverse_pointer), \
576
CCC_Range_reverse *: CCC_range_reverse_end, \
577
CCC_Range_reverse const *: CCC_range_reverse_end, \
578
CCC_Handle_range_reverse *: CCC_handle_range_reverse_end, \
579
CCC_Handle_range_reverse const *: CCC_handle_range_reverse_end)( \
580
(range_reverse_pointer) \
581
)
582
583
#define CCC_private_splice(container_pointer, splice_arguments...) \
584
_Generic((container_pointer), \
585
CCC_Singly_linked_list *: CCC_singly_linked_list_splice, \
586
CCC_Singly_linked_list const *: CCC_singly_linked_list_splice, \
587
CCC_Doubly_linked_list *: CCC_doubly_linked_list_splice, \
588
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_splice)( \
589
(container_pointer), splice_arguments \
590
)
591
592
#define CCC_private_splice_range(container_pointer, splice_range_arguments...) \
593
_Generic((container_pointer), \
594
CCC_Singly_linked_list *: CCC_singly_linked_list_splice_range, \
595
CCC_Singly_linked_list const *: CCC_singly_linked_list_splice_range, \
596
CCC_Doubly_linked_list *: CCC_doubly_linked_list_splice_range, \
597
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_splice_range)( \
598
(container_pointer), splice_range_arguments \
599
)
600
601
/*=================== Memory Management =======================*/
602
603
#define CCC_private_copy(destination_container_pointer, \
604
source_container_pointer, \
605
allocate_pointer) \
606
_Generic((destination_container_pointer), \
607
CCC_Bitset *: CCC_bitset_copy, \
608
CCC_Flat_hash_map *: CCC_flat_hash_map_copy, \
609
CCC_Array_adaptive_map *: CCC_array_adaptive_map_copy, \
610
CCC_Flat_priority_queue *: CCC_flat_priority_queue_copy, \
611
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_copy, \
612
CCC_Array_tree_map *: CCC_array_tree_map_copy)( \
613
(destination_container_pointer), \
614
(source_container_pointer), \
615
(allocate_pointer) \
616
)
617
618
#define CCC_private_reserve(container_pointer, n_to_add, allocate_pointer) \
619
_Generic((container_pointer), \
620
CCC_Bitset *: CCC_bitset_reserve, \
621
CCC_Buffer *: CCC_buffer_reserve, \
622
CCC_Flat_hash_map *: CCC_flat_hash_map_reserve, \
623
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reserve, \
624
CCC_Flat_priority_queue *: CCC_flat_priority_queue_reserve, \
625
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_reserve, \
626
CCC_Array_tree_map *: CCC_array_tree_map_reserve)((container_pointer), \
627
(n_to_add), \
628
(allocate_pointer))
629
630
#define CCC_private_clear(container_pointer, ...) \
631
_Generic((container_pointer), \
632
CCC_Bitset *: CCC_bitset_clear, \
633
CCC_Buffer *: CCC_buffer_clear, \
634
CCC_Flat_hash_map *: CCC_flat_hash_map_clear, \
635
CCC_Array_adaptive_map *: CCC_array_adaptive_map_clear, \
636
CCC_Flat_priority_queue *: CCC_flat_priority_queue_clear, \
637
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_clear, \
638
CCC_Singly_linked_list *: CCC_singly_linked_list_clear, \
639
CCC_Doubly_linked_list *: CCC_doubly_linked_list_clear, \
640
CCC_Adaptive_map *: CCC_adaptive_map_clear, \
641
CCC_Priority_queue *: CCC_priority_queue_clear, \
642
CCC_Tree_map *: CCC_tree_map_clear, \
643
CCC_Array_tree_map *: CCC_array_tree_map_clear)( \
644
(container_pointer)__VA_OPT__(, __VA_ARGS__) \
645
)
646
647
#define CCC_private_clear_and_free(container_pointer, ...) \
648
_Generic((container_pointer), \
649
CCC_Bitset *: CCC_bitset_clear_and_free, \
650
CCC_Buffer *: CCC_buffer_clear_and_free, \
651
CCC_Flat_hash_map *: CCC_flat_hash_map_clear_and_free, \
652
CCC_Array_adaptive_map *: CCC_array_adaptive_map_clear_and_free, \
653
CCC_Flat_priority_queue *: CCC_flat_priority_queue_clear_and_free, \
654
CCC_Flat_double_ended_queue \
655
*: CCC_flat_double_ended_queue_clear_and_free, \
656
CCC_Array_tree_map *: CCC_array_tree_map_clear_and_free)( \
657
(container_pointer)__VA_OPT__(, __VA_ARGS__) \
658
)
659
660
/*=================== Standard Getters Interface =======================*/
661
662
#define CCC_private_count(container_pointer) \
663
_Generic((container_pointer), \
664
CCC_Bitset *: CCC_bitset_count, \
665
CCC_Buffer *: CCC_buffer_count, \
666
CCC_Flat_hash_map *: CCC_flat_hash_map_count, \
667
CCC_Adaptive_map *: CCC_adaptive_map_count, \
668
CCC_Array_adaptive_map *: CCC_array_adaptive_map_count, \
669
CCC_Flat_priority_queue *: CCC_flat_priority_queue_count, \
670
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_count, \
671
CCC_Priority_queue *: CCC_priority_queue_count, \
672
CCC_Singly_linked_list *: CCC_singly_linked_list_count, \
673
CCC_Doubly_linked_list *: CCC_doubly_linked_list_count, \
674
CCC_Tree_map *: CCC_tree_map_count, \
675
CCC_Array_tree_map *: CCC_array_tree_map_count, \
676
CCC_Bitset const *: CCC_bitset_count, \
677
CCC_Buffer const *: CCC_buffer_count, \
678
CCC_Flat_hash_map const *: CCC_flat_hash_map_count, \
679
CCC_Adaptive_map const *: CCC_adaptive_map_count, \
680
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_count, \
681
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_count, \
682
CCC_Flat_double_ended_queue const \
683
*: CCC_flat_double_ended_queue_count, \
684
CCC_Priority_queue const *: CCC_priority_queue_count, \
685
CCC_Singly_linked_list const *: CCC_singly_linked_list_count, \
686
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_count, \
687
CCC_Array_tree_map const *: CCC_array_tree_map_count, \
688
CCC_Tree_map const *: CCC_tree_map_count)((container_pointer))
689
690
#define CCC_private_capacity(container_pointer) \
691
_Generic((container_pointer), \
692
CCC_Bitset *: CCC_bitset_capacity, \
693
CCC_Buffer *: CCC_buffer_capacity, \
694
CCC_Flat_hash_map *: CCC_flat_hash_map_capacity, \
695
CCC_Array_adaptive_map *: CCC_array_adaptive_map_capacity, \
696
CCC_Flat_priority_queue *: CCC_flat_priority_queue_capacity, \
697
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_capacity, \
698
CCC_Array_tree_map *: CCC_array_tree_map_capacity, \
699
CCC_Bitset const *: CCC_bitset_capacity, \
700
CCC_Buffer const *: CCC_buffer_capacity, \
701
CCC_Flat_hash_map const *: CCC_flat_hash_map_capacity, \
702
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_capacity, \
703
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_capacity, \
704
CCC_Flat_double_ended_queue const \
705
*: CCC_flat_double_ended_queue_capacity, \
706
CCC_Array_tree_map const *: CCC_array_tree_map_capacity)( \
707
(container_pointer) \
708
)
709
710
#define CCC_private_is_empty(container_pointer) \
711
_Generic((container_pointer), \
712
CCC_Bitset *: CCC_bitset_is_empty, \
713
CCC_Buffer *: CCC_buffer_is_empty, \
714
CCC_Flat_hash_map *: CCC_flat_hash_map_is_empty, \
715
CCC_Adaptive_map *: CCC_adaptive_map_is_empty, \
716
CCC_Array_adaptive_map *: CCC_array_adaptive_map_is_empty, \
717
CCC_Flat_priority_queue *: CCC_flat_priority_queue_is_empty, \
718
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_is_empty, \
719
CCC_Priority_queue *: CCC_priority_queue_is_empty, \
720
CCC_Singly_linked_list *: CCC_singly_linked_list_is_empty, \
721
CCC_Doubly_linked_list *: CCC_doubly_linked_list_is_empty, \
722
CCC_Tree_map *: CCC_tree_map_is_empty, \
723
CCC_Array_tree_map *: CCC_array_tree_map_is_empty, \
724
CCC_Bitset const *: CCC_bitset_is_empty, \
725
CCC_Buffer const *: CCC_buffer_is_empty, \
726
CCC_Flat_hash_map const *: CCC_flat_hash_map_is_empty, \
727
CCC_Adaptive_map const *: CCC_adaptive_map_is_empty, \
728
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_is_empty, \
729
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_is_empty, \
730
CCC_Flat_double_ended_queue const \
731
*: CCC_flat_double_ended_queue_is_empty, \
732
CCC_Priority_queue const *: CCC_priority_queue_is_empty, \
733
CCC_Singly_linked_list const *: CCC_singly_linked_list_is_empty, \
734
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_is_empty, \
735
CCC_Array_tree_map const *: CCC_array_tree_map_is_empty, \
736
CCC_Tree_map const *: CCC_tree_map_is_empty)((container_pointer))
737
738
#define CCC_private_validate(container_pointer) \
739
_Generic((container_pointer), \
740
CCC_Flat_hash_map *: CCC_flat_hash_map_validate, \
741
CCC_Adaptive_map *: CCC_adaptive_map_validate, \
742
CCC_Array_adaptive_map *: CCC_array_adaptive_map_validate, \
743
CCC_Flat_priority_queue *: CCC_flat_priority_queue_validate, \
744
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_validate, \
745
CCC_Priority_queue *: CCC_priority_queue_validate, \
746
CCC_Singly_linked_list *: CCC_singly_linked_list_validate, \
747
CCC_Doubly_linked_list *: CCC_doubly_linked_list_validate, \
748
CCC_Tree_map *: CCC_tree_map_validate, \
749
CCC_Array_tree_map *: CCC_array_tree_map_validate, \
750
CCC_Flat_hash_map const *: CCC_flat_hash_map_validate, \
751
CCC_Adaptive_map const *: CCC_adaptive_map_validate, \
752
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_validate, \
753
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_validate, \
754
CCC_Flat_double_ended_queue const \
755
*: CCC_flat_double_ended_queue_validate, \
756
CCC_Priority_queue const *: CCC_priority_queue_validate, \
757
CCC_Singly_linked_list const *: CCC_singly_linked_list_validate, \
758
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_validate, \
759
CCC_Array_tree_map const *: CCC_array_tree_map_validate, \
760
CCC_Tree_map const *: CCC_tree_map_validate)((container_pointer))
761
762
// clang-format on
763
764
#endif
/* CCC_PRIVATE_TRAITS_H */
ccc
private
private_traits.h
Generated by
1.9.6