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"
21
#include "../array_adaptive_map.h"
22
#include "../array_tree_map.h"
23
#include "../bitset.h"
24
#include "../buffer.h"
25
#include "../doubly_linked_list.h"
26
#include "../flat_double_ended_queue.h"
27
#include "../flat_hash_map.h"
28
#include "../flat_priority_queue.h"
29
#include "../priority_queue.h"
30
#include "../singly_linked_list.h"
31
#include "../tree_map.h"
32
#include "../types.h"
33
/* NOLINTEND */
34
35
/*==================== Entry/Handle Interface =========================*/
36
37
#define CCC_private_swap_entry(container_pointer, swap_args...) \
38
_Generic((container_pointer), \
39
CCC_Flat_hash_map *: CCC_flat_hash_map_swap_entry, \
40
CCC_Adaptive_map *: CCC_adaptive_map_swap_entry, \
41
CCC_Tree_map *: CCC_tree_map_swap_entry)((container_pointer), \
42
swap_args)
43
44
#define CCC_private_swap_entry_wrap(container_pointer, \
45
key_val_container_array_pointer...) \
46
&(CCC_Entry) \
47
{ \
48
CCC_private_swap_entry(container_pointer, \
49
key_val_container_array_pointer) \
50
.private \
51
}
52
53
#define CCC_private_swap_handle(container_pointer, swap_args...) \
54
_Generic((container_pointer), \
55
CCC_Array_adaptive_map *: CCC_array_adaptive_map_swap_handle, \
56
CCC_Array_tree_map *: CCC_array_tree_map_swap_handle)( \
57
(container_pointer), swap_args)
58
59
#define CCC_private_swap_handle_wrap(container_pointer, \
60
key_val_container_array_pointer...) \
61
&(CCC_Handle) \
62
{ \
63
CCC_private_swap_handle(container_pointer, \
64
key_val_container_array_pointer) \
65
.private \
66
}
67
68
#define CCC_private_try_insert(container_pointer, try_insert_args...) \
69
_Generic((container_pointer), \
70
CCC_Array_adaptive_map *: CCC_array_adaptive_map_try_insert, \
71
CCC_Array_tree_map *: CCC_array_tree_map_try_insert, \
72
CCC_Flat_hash_map *: CCC_flat_hash_map_try_insert, \
73
CCC_Adaptive_map *: CCC_adaptive_map_try_insert, \
74
CCC_Tree_map *: CCC_tree_map_try_insert)((container_pointer), \
75
try_insert_args)
76
77
#define CCC_private_try_insert_wrap(container_pointer, try_insert_args...) \
78
_Generic((container_pointer), \
79
CCC_Array_adaptive_map *: &( \
80
CCC_Handle){CCC_array_adaptive_map_try_insert( \
81
(CCC_Array_adaptive_map *)container_pointer, \
82
try_insert_args) \
83
.private}, \
84
CCC_Array_tree_map *: &( \
85
CCC_Handle){CCC_array_tree_map_try_insert( \
86
(CCC_Array_tree_map *)container_pointer, \
87
try_insert_args) \
88
.private}, \
89
CCC_Flat_hash_map *: &( \
90
CCC_Entry){CCC_flat_hash_map_try_insert( \
91
(CCC_Flat_hash_map *)container_pointer, \
92
try_insert_args) \
93
.private}, \
94
CCC_Adaptive_map *: &( \
95
CCC_Entry){CCC_adaptive_map_try_insert( \
96
(CCC_Adaptive_map *)container_pointer, \
97
(CCC_Adaptive_map_node *)try_insert_args) \
98
.private}, \
99
CCC_Tree_map *: &(CCC_Entry){ \
100
CCC_tree_map_try_insert((CCC_Tree_map *)container_pointer, \
101
(CCC_Tree_map_node *)try_insert_args) \
102
.private})
103
104
#define CCC_private_insert_or_assign(container_pointer, \
105
insert_or_assign_args...) \
106
_Generic((container_pointer), \
107
CCC_Array_adaptive_map *: CCC_array_adaptive_map_insert_or_assign, \
108
CCC_Array_tree_map *: CCC_array_tree_map_insert_or_assign, \
109
CCC_Flat_hash_map *: CCC_flat_hash_map_insert_or_assign, \
110
CCC_Adaptive_map *: CCC_adaptive_map_insert_or_assign, \
111
CCC_Tree_map *: CCC_tree_map_insert_or_assign)((container_pointer), \
112
insert_or_assign_args)
113
114
#define CCC_private_insert_or_assign_wrap(container_pointer, \
115
insert_or_assign_args...) \
116
_Generic((container_pointer), \
117
CCC_Array_adaptive_map *: &( \
118
CCC_Handle){CCC_array_adaptive_map_insert_or_assign( \
119
(CCC_Array_adaptive_map *)container_pointer, \
120
insert_or_assign_args) \
121
.private}, \
122
CCC_Array_tree_map *: &( \
123
CCC_Handle){CCC_array_tree_map_insert_or_assign( \
124
(CCC_Array_tree_map *)container_pointer, \
125
insert_or_assign_args) \
126
.private}, \
127
CCC_Flat_hash_map *: &( \
128
CCC_Entry){CCC_flat_hash_map_insert_or_assign( \
129
(CCC_Flat_hash_map *)container_pointer, \
130
insert_or_assign_args) \
131
.private}, \
132
CCC_Adaptive_map *: &( \
133
CCC_Entry){CCC_adaptive_map_insert_or_assign( \
134
(CCC_Adaptive_map *)container_pointer, \
135
(CCC_Adaptive_map_node *) \
136
insert_or_assign_args) \
137
.private}, \
138
CCC_Tree_map *: &(CCC_Entry){ \
139
CCC_tree_map_insert_or_assign( \
140
(CCC_Tree_map *)container_pointer, \
141
(CCC_Tree_map_node *)insert_or_assign_args) \
142
.private})
143
144
#define CCC_private_remove_key_value(container_pointer, \
145
key_val_container_array_pointer...) \
146
_Generic((container_pointer), \
147
CCC_Array_adaptive_map *: CCC_array_adaptive_map_remove_key_value, \
148
CCC_Array_tree_map *: CCC_array_tree_map_remove_key_value, \
149
CCC_Flat_hash_map *: CCC_flat_hash_map_remove_key_value, \
150
CCC_Adaptive_map *: CCC_adaptive_map_remove_key_value, \
151
CCC_Tree_map *: CCC_tree_map_remove_key_value)( \
152
(container_pointer), key_val_container_array_pointer)
153
154
#define CCC_private_remove_key_value_wrap(container_pointer, \
155
key_val_container_array_pointer...) \
156
_Generic((container_pointer), \
157
CCC_Array_adaptive_map *: &( \
158
CCC_Handle){CCC_array_adaptive_map_remove_key_value( \
159
(CCC_Array_adaptive_map *)container_pointer, \
160
key_val_container_array_pointer) \
161
.private}, \
162
CCC_Array_tree_map *: &( \
163
CCC_Handle){CCC_array_tree_map_remove_key_value( \
164
(CCC_Array_tree_map *)container_pointer, \
165
key_val_container_array_pointer) \
166
.private}, \
167
CCC_Flat_hash_map *: &( \
168
CCC_Entry){CCC_flat_hash_map_remove_key_value( \
169
(CCC_Flat_hash_map *)container_pointer, \
170
key_val_container_array_pointer) \
171
.private}, \
172
CCC_Adaptive_map *: &( \
173
CCC_Entry){CCC_adaptive_map_remove_key_value( \
174
(CCC_Adaptive_map *)container_pointer, \
175
(CCC_Adaptive_map_node *) \
176
key_val_container_array_pointer) \
177
.private}, \
178
CCC_Tree_map *: &(CCC_Entry){ \
179
CCC_tree_map_remove_key_value( \
180
(CCC_Tree_map *)container_pointer, \
181
(CCC_Tree_map_node *)key_val_container_array_pointer) \
182
.private})
183
184
#define CCC_private_remove_entry(container_entry_pointer) \
185
_Generic((container_entry_pointer), \
186
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_remove_entry, \
187
CCC_Adaptive_map_entry *: CCC_adaptive_map_remove_entry, \
188
CCC_Tree_map_entry *: CCC_tree_map_remove_entry, \
189
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_remove_entry, \
190
CCC_Adaptive_map_entry const *: CCC_adaptive_map_remove_entry, \
191
CCC_Tree_map_entry const *: CCC_tree_map_remove_entry)( \
192
(container_entry_pointer))
193
194
#define CCC_private_remove_entry_wrap(container_entry_pointer) \
195
&(CCC_Entry) \
196
{ \
197
CCC_private_remove_entry(container_entry_pointer).private \
198
}
199
200
#define CCC_private_remove_handle(container_array_pointer) \
201
_Generic((container_array_pointer), \
202
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_remove_handle, \
203
CCC_Array_adaptive_map_handle const \
204
*: CCC_array_adaptive_map_remove_handle, \
205
CCC_Array_tree_map_handle *: CCC_array_tree_map_remove_handle, \
206
CCC_Array_tree_map_handle const *: CCC_array_tree_map_remove_handle)( \
207
(container_array_pointer))
208
209
#define CCC_private_remove_handle_wrap(container_array_pointer) \
210
&(CCC_Handle) \
211
{ \
212
CCC_private_remove_handle(container_array_pointer).private \
213
}
214
215
#define CCC_private_entry(container_pointer, key_pointer...) \
216
_Generic((container_pointer), \
217
CCC_Flat_hash_map *: CCC_flat_hash_map_entry, \
218
CCC_Flat_hash_map const *: CCC_flat_hash_map_entry, \
219
CCC_Adaptive_map *: CCC_adaptive_map_entry, \
220
CCC_Tree_map *: CCC_tree_map_entry, \
221
CCC_Tree_map const *: CCC_tree_map_entry)((container_pointer), \
222
key_pointer)
223
224
#define CCC_private_entry_wrap(container_pointer, key_pointer...) \
225
_Generic((container_pointer), \
226
CCC_Flat_hash_map *: &( \
227
CCC_Flat_hash_map_entry){CCC_flat_hash_map_entry( \
228
(CCC_Flat_hash_map \
229
*)(container_pointer), \
230
key_pointer) \
231
.private}, \
232
CCC_Flat_hash_map const *: &( \
233
CCC_Flat_hash_map_entry){CCC_flat_hash_map_entry( \
234
(CCC_Flat_hash_map \
235
*)(container_pointer), \
236
key_pointer) \
237
.private}, \
238
CCC_Adaptive_map *: &( \
239
CCC_Adaptive_map_entry){CCC_adaptive_map_entry( \
240
(CCC_Adaptive_map \
241
*)(container_pointer), \
242
key_pointer) \
243
.private}, \
244
CCC_Tree_map *: &( \
245
CCC_Tree_map_entry){CCC_tree_map_entry( \
246
(CCC_Tree_map *)(container_pointer), \
247
key_pointer) \
248
.private}, \
249
CCC_Tree_map const *: &(CCC_Tree_map_entry){ \
250
CCC_tree_map_entry((CCC_Tree_map *)(container_pointer), \
251
key_pointer) \
252
.private})
253
254
#define CCC_private_handle(container_pointer, key_pointer...) \
255
_Generic((container_pointer), \
256
CCC_Array_adaptive_map *: CCC_array_adaptive_map_handle, \
257
CCC_Array_tree_map *: CCC_array_tree_map_handle, \
258
CCC_Array_tree_map const *: CCC_array_tree_map_handle)( \
259
(container_pointer), key_pointer)
260
261
#define CCC_private_handle_wrap(container_pointer, key_pointer...) \
262
_Generic( \
263
(container_pointer), \
264
CCC_Array_adaptive_map *: &( \
265
CCC_Array_adaptive_map_handle){CCC_array_adaptive_map_handle( \
266
(CCC_Array_adaptive_map \
267
*)(container_pointer), \
268
key_pointer) \
269
.private}, \
270
CCC_Array_tree_map *: &( \
271
CCC_Array_tree_map_handle){CCC_array_tree_map_handle( \
272
(CCC_Array_tree_map \
273
*)(container_pointer), \
274
key_pointer) \
275
.private}, \
276
CCC_Array_tree_map const *: &(CCC_Array_tree_map_handle){ \
277
CCC_array_tree_map_handle( \
278
(CCC_Array_tree_map *)(container_pointer), key_pointer) \
279
.private})
280
281
#define CCC_private_and_modify(container_entry_pointer, mod_fn) \
282
_Generic((container_entry_pointer), \
283
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_and_modify, \
284
CCC_Adaptive_map_entry *: CCC_adaptive_map_and_modify, \
285
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_and_modify, \
286
CCC_Tree_map_entry *: CCC_tree_map_and_modify, \
287
CCC_Array_tree_map_handle *: CCC_array_tree_map_and_modify, \
288
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_and_modify, \
289
CCC_Array_tree_map_handle const *: CCC_array_tree_map_and_modify, \
290
CCC_Adaptive_map_entry const *: CCC_adaptive_map_and_modify, \
291
CCC_Array_adaptive_map_handle const \
292
*: CCC_array_adaptive_map_and_modify, \
293
CCC_Tree_map_entry const *: CCC_tree_map_and_modify)( \
294
(container_entry_pointer), (mod_fn))
295
296
#define CCC_private_and_modify_context(container_entry_pointer, mod_fn, \
297
context_data_pointer...) \
298
_Generic((container_entry_pointer), \
299
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_and_modify_context, \
300
CCC_Adaptive_map_entry *: CCC_adaptive_map_and_modify_context, \
301
CCC_Array_adaptive_map_handle \
302
*: CCC_array_adaptive_map_and_modify_context, \
303
CCC_Array_tree_map_handle *: CCC_array_tree_map_and_modify_context, \
304
CCC_Tree_map_entry *: CCC_tree_map_and_modify_context, \
305
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_and_modify_context, \
306
CCC_Adaptive_map_entry const *: CCC_adaptive_map_and_modify_context, \
307
CCC_Array_tree_map_handle const \
308
*: CCC_array_tree_map_and_modify_context, \
309
CCC_Array_adaptive_map_handle const \
310
*: CCC_array_adaptive_map_and_modify_context, \
311
CCC_Tree_map_entry const *: CCC_tree_map_and_modify_context)( \
312
(container_entry_pointer), (mod_fn), context_data_pointer)
313
314
#define CCC_private_insert_entry(container_entry_pointer, \
315
key_val_container_array_pointer...) \
316
_Generic((container_entry_pointer), \
317
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_insert_entry, \
318
CCC_Adaptive_map_entry *: CCC_adaptive_map_insert_entry, \
319
CCC_Tree_map_entry *: CCC_tree_map_insert_entry, \
320
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_insert_entry, \
321
CCC_Adaptive_map_entry const *: CCC_adaptive_map_insert_entry, \
322
CCC_Tree_map_entry const *: CCC_tree_map_insert_entry)( \
323
(container_entry_pointer), key_val_container_array_pointer)
324
325
#define CCC_private_insert_handle(container_array_pointer, \
326
key_val_container_array_pointer...) \
327
_Generic((container_array_pointer), \
328
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_insert_handle, \
329
CCC_Array_adaptive_map_handle const \
330
*: CCC_array_adaptive_map_insert_handle, \
331
CCC_Array_tree_map_handle *: CCC_array_tree_map_insert_handle, \
332
CCC_Array_tree_map_handle const *: CCC_array_tree_map_insert_handle)( \
333
(container_array_pointer), key_val_container_array_pointer)
334
335
#define CCC_private_or_insert(container_entry_pointer, \
336
key_val_container_array_pointer...) \
337
_Generic((container_entry_pointer), \
338
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_or_insert, \
339
CCC_Adaptive_map_entry *: CCC_adaptive_map_or_insert, \
340
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_or_insert, \
341
CCC_Tree_map_entry *: CCC_tree_map_or_insert, \
342
CCC_Array_tree_map_handle *: CCC_array_tree_map_or_insert, \
343
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_or_insert, \
344
CCC_Adaptive_map_entry const *: CCC_adaptive_map_or_insert, \
345
CCC_Array_tree_map_handle const *: CCC_array_tree_map_or_insert, \
346
CCC_Array_adaptive_map_handle const \
347
*: CCC_array_adaptive_map_or_insert, \
348
CCC_Tree_map_entry const *: CCC_tree_map_or_insert)( \
349
(container_entry_pointer), key_val_container_array_pointer)
350
351
#define CCC_private_unwrap(container_entry_pointer) \
352
_Generic((container_entry_pointer), \
353
CCC_Entry *: CCC_entry_unwrap, \
354
CCC_Entry const *: CCC_entry_unwrap, \
355
CCC_Handle *: CCC_handle_unwrap, \
356
CCC_Handle const *: CCC_handle_unwrap, \
357
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_unwrap, \
358
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_unwrap, \
359
CCC_Adaptive_map_entry *: CCC_adaptive_map_unwrap, \
360
CCC_Adaptive_map_entry const *: CCC_adaptive_map_unwrap, \
361
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_unwrap, \
362
CCC_Array_adaptive_map_handle const *: CCC_array_adaptive_map_unwrap, \
363
CCC_Array_tree_map_handle *: CCC_array_tree_map_unwrap, \
364
CCC_Array_tree_map_handle const *: CCC_array_tree_map_unwrap, \
365
CCC_Tree_map_entry *: CCC_tree_map_unwrap, \
366
CCC_Tree_map_entry const *: CCC_tree_map_unwrap)( \
367
(container_entry_pointer))
368
369
#define CCC_private_occupied(container_entry_pointer) \
370
_Generic((container_entry_pointer), \
371
CCC_Entry *: CCC_entry_occupied, \
372
CCC_Entry const *: CCC_entry_occupied, \
373
CCC_Handle *: CCC_handle_occupied, \
374
CCC_Handle const *: CCC_handle_occupied, \
375
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_occupied, \
376
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_occupied, \
377
CCC_Adaptive_map_entry *: CCC_adaptive_map_occupied, \
378
CCC_Adaptive_map_entry const *: CCC_adaptive_map_occupied, \
379
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_occupied, \
380
CCC_Array_adaptive_map_handle const \
381
*: CCC_array_adaptive_map_occupied, \
382
CCC_Array_tree_map_handle *: CCC_array_tree_map_occupied, \
383
CCC_Array_tree_map_handle const *: CCC_array_tree_map_occupied, \
384
CCC_Tree_map_entry *: CCC_tree_map_occupied, \
385
CCC_Tree_map_entry const *: CCC_tree_map_occupied)( \
386
(container_entry_pointer))
387
388
#define CCC_private_insert_error(container_entry_pointer) \
389
_Generic((container_entry_pointer), \
390
CCC_Entry *: CCC_entry_insert_error, \
391
CCC_Entry const *: CCC_entry_insert_error, \
392
CCC_Handle *: CCC_handle_insert_error, \
393
CCC_Handle const *: CCC_handle_insert_error, \
394
CCC_Flat_hash_map_entry *: CCC_flat_hash_map_insert_error, \
395
CCC_Flat_hash_map_entry const *: CCC_flat_hash_map_insert_error, \
396
CCC_Adaptive_map_entry *: CCC_adaptive_map_insert_error, \
397
CCC_Adaptive_map_entry const *: CCC_adaptive_map_insert_error, \
398
CCC_Array_adaptive_map_handle *: CCC_array_adaptive_map_insert_error, \
399
CCC_Array_adaptive_map_handle const \
400
*: CCC_array_adaptive_map_insert_error, \
401
CCC_Array_tree_map_handle *: CCC_array_tree_map_insert_error, \
402
CCC_Array_tree_map_handle const *: CCC_array_tree_map_insert_error, \
403
CCC_Tree_map_entry *: CCC_tree_map_insert_error, \
404
CCC_Tree_map_entry const *: CCC_tree_map_insert_error)( \
405
(container_entry_pointer))
406
407
/*====================== Misc Search Interface ===========================*/
408
409
#define CCC_private_get_key_value(container_pointer, key_pointer...) \
410
_Generic((container_pointer), \
411
CCC_Flat_hash_map *: CCC_flat_hash_map_get_key_value, \
412
CCC_Flat_hash_map const *: CCC_flat_hash_map_get_key_value, \
413
CCC_Adaptive_map *: CCC_adaptive_map_get_key_value, \
414
CCC_Array_adaptive_map *: CCC_array_adaptive_map_get_key_value, \
415
CCC_Array_tree_map *: CCC_array_tree_map_get_key_value, \
416
CCC_Array_tree_map const *: CCC_array_tree_map_get_key_value, \
417
CCC_Tree_map *: CCC_tree_map_get_key_value, \
418
CCC_Tree_map const *: CCC_tree_map_get_key_value)((container_pointer), \
419
key_pointer)
420
421
#define CCC_private_contains(container_pointer, key_pointer...) \
422
_Generic((container_pointer), \
423
CCC_Flat_hash_map *: CCC_flat_hash_map_contains, \
424
CCC_Flat_hash_map const *: CCC_flat_hash_map_contains, \
425
CCC_Adaptive_map *: CCC_adaptive_map_contains, \
426
CCC_Array_adaptive_map *: CCC_array_adaptive_map_contains, \
427
CCC_Array_tree_map *: CCC_array_tree_map_contains, \
428
CCC_Array_tree_map const *: CCC_array_tree_map_contains, \
429
CCC_Tree_map *: CCC_tree_map_contains, \
430
CCC_Tree_map const *: CCC_tree_map_contains)((container_pointer), \
431
key_pointer)
432
433
/*================ Sequential Containers Interface =====================*/
434
435
#define CCC_private_push(container_pointer, container_array_pointer...) \
436
_Generic((container_pointer), \
437
CCC_Flat_priority_queue *: CCC_flat_priority_queue_push, \
438
CCC_Priority_queue *: CCC_priority_queue_push)( \
439
(container_pointer), container_array_pointer)
440
441
#define CCC_private_push_back(container_pointer, container_array_pointer...) \
442
_Generic((container_pointer), \
443
CCC_Bitset *: CCC_bitset_push_back, \
444
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_push_back, \
445
CCC_Doubly_linked_list *: CCC_doubly_linked_list_push_back, \
446
CCC_Buffer *: CCC_buffer_push_back)((container_pointer), \
447
container_array_pointer)
448
449
#define CCC_private_push_front(container_pointer, container_array_pointer...) \
450
_Generic((container_pointer), \
451
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_push_front, \
452
CCC_Doubly_linked_list *: CCC_doubly_linked_list_push_front, \
453
CCC_Singly_linked_list *: CCC_singly_linked_list_push_front)( \
454
(container_pointer), container_array_pointer)
455
456
#define CCC_private_pop(container_pointer, ...) \
457
_Generic((container_pointer), \
458
CCC_Flat_priority_queue *: CCC_flat_priority_queue_pop, \
459
CCC_Priority_queue *: CCC_priority_queue_pop)( \
460
(container_pointer)__VA_OPT__(, __VA_ARGS__))
461
462
#define CCC_private_pop_front(container_pointer) \
463
_Generic((container_pointer), \
464
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_pop_front, \
465
CCC_Doubly_linked_list *: CCC_doubly_linked_list_pop_front, \
466
CCC_Singly_linked_list *: CCC_singly_linked_list_pop_front)( \
467
(container_pointer))
468
469
#define CCC_private_pop_back(container_pointer) \
470
_Generic((container_pointer), \
471
CCC_Bitset *: CCC_bitset_pop_back, \
472
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_pop_back, \
473
CCC_Doubly_linked_list *: CCC_doubly_linked_list_pop_back, \
474
CCC_Buffer *: CCC_buffer_pop_back)((container_pointer))
475
476
#define CCC_private_front(container_pointer) \
477
_Generic((container_pointer), \
478
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_front, \
479
CCC_Doubly_linked_list *: CCC_doubly_linked_list_front, \
480
CCC_Flat_priority_queue *: CCC_flat_priority_queue_front, \
481
CCC_Priority_queue *: CCC_priority_queue_front, \
482
CCC_Singly_linked_list *: CCC_singly_linked_list_front, \
483
CCC_Flat_double_ended_queue const \
484
*: CCC_flat_double_ended_queue_front, \
485
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_front, \
486
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_front, \
487
CCC_Priority_queue const *: CCC_priority_queue_front, \
488
CCC_Singly_linked_list const *: CCC_singly_linked_list_front)( \
489
(container_pointer))
490
491
#define CCC_private_back(container_pointer) \
492
_Generic((container_pointer), \
493
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_back, \
494
CCC_Doubly_linked_list *: CCC_doubly_linked_list_back, \
495
CCC_Buffer *: CCC_buffer_back, \
496
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_back, \
497
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_back, \
498
CCC_Buffer const *: CCC_buffer_back)((container_pointer))
499
500
/*================ Priority Queue Update Interface =====================*/
501
502
#define CCC_private_update(container_pointer, update_args...) \
503
_Generic((container_pointer), \
504
CCC_Flat_priority_queue *: CCC_flat_priority_queue_update, \
505
CCC_Priority_queue *: CCC_priority_queue_update)((container_pointer), \
506
update_args)
507
508
#define CCC_private_increase(container_pointer, increase_args...) \
509
_Generic((container_pointer), \
510
CCC_Flat_priority_queue *: CCC_flat_priority_queue_increase, \
511
CCC_Priority_queue *: CCC_priority_queue_increase)( \
512
(container_pointer), increase_args)
513
514
#define CCC_private_decrease(container_pointer, decrease_args...) \
515
_Generic((container_pointer), \
516
CCC_Flat_priority_queue *: CCC_flat_priority_queue_decrease, \
517
CCC_Priority_queue *: CCC_priority_queue_decrease)( \
518
(container_pointer), decrease_args)
519
520
#define CCC_private_extract(container_pointer, container_array_pointer...) \
521
_Generic((container_pointer), \
522
CCC_Doubly_linked_list *: CCC_doubly_linked_list_extract, \
523
CCC_Singly_linked_list *: CCC_singly_linked_list_extract, \
524
CCC_Priority_queue *: CCC_priority_queue_extract)( \
525
(container_pointer), container_array_pointer)
526
527
#define CCC_private_erase(container_pointer, container_array_pointer...) \
528
_Generic((container_pointer), \
529
CCC_Flat_priority_queue *: CCC_flat_priority_queue_erase)( \
530
(container_pointer), container_array_pointer)
531
532
#define CCC_private_extract_range(container_pointer, \
533
container_array_begin_end_pointer...) \
534
_Generic((container_pointer), \
535
CCC_Doubly_linked_list *: CCC_doubly_linked_list_extract_range, \
536
CCC_Singly_linked_list *: CCC_singly_linked_list_extract_range)( \
537
(container_pointer), container_array_begin_end_pointer)
538
539
/*=================== Iterators Interface ==============================*/
540
541
#define CCC_private_begin(container_pointer) \
542
_Generic((container_pointer), \
543
CCC_Buffer *: CCC_buffer_begin, \
544
CCC_Flat_hash_map *: CCC_flat_hash_map_begin, \
545
CCC_Adaptive_map *: CCC_adaptive_map_begin, \
546
CCC_Array_adaptive_map *: CCC_array_adaptive_map_begin, \
547
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_begin, \
548
CCC_Singly_linked_list *: CCC_singly_linked_list_begin, \
549
CCC_Doubly_linked_list *: CCC_doubly_linked_list_begin, \
550
CCC_Tree_map *: CCC_tree_map_begin, \
551
CCC_Array_tree_map *: CCC_array_tree_map_begin, \
552
CCC_Buffer const *: CCC_buffer_begin, \
553
CCC_Flat_hash_map const *: CCC_flat_hash_map_begin, \
554
CCC_Adaptive_map const *: CCC_adaptive_map_begin, \
555
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_begin, \
556
CCC_Flat_double_ended_queue const \
557
*: CCC_flat_double_ended_queue_begin, \
558
CCC_Singly_linked_list const *: CCC_singly_linked_list_begin, \
559
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_begin, \
560
CCC_Array_tree_map const *: CCC_array_tree_map_begin, \
561
CCC_Tree_map const *: CCC_tree_map_begin)((container_pointer))
562
563
#define CCC_private_reverse_begin(container_pointer) \
564
_Generic((container_pointer), \
565
CCC_Buffer *: CCC_buffer_reverse_begin, \
566
CCC_Adaptive_map *: CCC_adaptive_map_reverse_begin, \
567
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_begin, \
568
CCC_Flat_double_ended_queue \
569
*: CCC_flat_double_ended_queue_reverse_begin, \
570
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_begin, \
571
CCC_Tree_map *: CCC_tree_map_reverse_begin, \
572
CCC_Array_tree_map *: CCC_array_tree_map_reverse_begin, \
573
CCC_Buffer const *: CCC_buffer_reverse_begin, \
574
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_begin, \
575
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_begin, \
576
CCC_Flat_double_ended_queue const \
577
*: CCC_flat_double_ended_queue_reverse_begin, \
578
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_begin, \
579
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_begin, \
580
CCC_Tree_map const *: CCC_tree_map_reverse_begin)((container_pointer))
581
582
#define CCC_private_next(container_pointer, void_iterator_pointer) \
583
_Generic((container_pointer), \
584
CCC_Buffer *: CCC_buffer_next, \
585
CCC_Flat_hash_map *: CCC_flat_hash_map_next, \
586
CCC_Adaptive_map *: CCC_adaptive_map_next, \
587
CCC_Array_adaptive_map *: CCC_array_adaptive_map_next, \
588
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_next, \
589
CCC_Singly_linked_list *: CCC_singly_linked_list_next, \
590
CCC_Doubly_linked_list *: CCC_doubly_linked_list_next, \
591
CCC_Tree_map *: CCC_tree_map_next, \
592
CCC_Array_tree_map *: CCC_array_tree_map_next, \
593
CCC_Buffer const *: CCC_buffer_next, \
594
CCC_Flat_hash_map const *: CCC_flat_hash_map_next, \
595
CCC_Adaptive_map const *: CCC_adaptive_map_next, \
596
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_next, \
597
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_next, \
598
CCC_Singly_linked_list const *: CCC_singly_linked_list_next, \
599
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_next, \
600
CCC_Array_tree_map const *: CCC_array_tree_map_next, \
601
CCC_Tree_map const *: CCC_tree_map_next)((container_pointer), \
602
(void_iterator_pointer))
603
604
#define CCC_private_reverse_next(container_pointer, void_iterator_pointer) \
605
_Generic((container_pointer), \
606
CCC_Buffer *: CCC_buffer_reverse_next, \
607
CCC_Adaptive_map *: CCC_adaptive_map_reverse_next, \
608
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_next, \
609
CCC_Flat_double_ended_queue \
610
*: CCC_flat_double_ended_queue_reverse_next, \
611
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_next, \
612
CCC_Tree_map *: CCC_tree_map_reverse_next, \
613
CCC_Array_tree_map *: CCC_array_tree_map_reverse_next, \
614
CCC_Buffer const *: CCC_buffer_reverse_next, \
615
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_next, \
616
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_next, \
617
CCC_Flat_double_ended_queue const \
618
*: CCC_flat_double_ended_queue_reverse_next, \
619
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_next, \
620
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_next, \
621
CCC_Tree_map const *: CCC_tree_map_reverse_next)( \
622
(container_pointer), (void_iterator_pointer))
623
624
#define CCC_private_end(container_pointer) \
625
_Generic((container_pointer), \
626
CCC_Buffer *: CCC_buffer_end, \
627
CCC_Flat_hash_map *: CCC_flat_hash_map_end, \
628
CCC_Adaptive_map *: CCC_adaptive_map_end, \
629
CCC_Array_adaptive_map *: CCC_array_adaptive_map_end, \
630
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_end, \
631
CCC_Singly_linked_list *: CCC_singly_linked_list_end, \
632
CCC_Doubly_linked_list *: CCC_doubly_linked_list_end, \
633
CCC_Tree_map *: CCC_tree_map_end, \
634
CCC_Array_tree_map *: CCC_array_tree_map_end, \
635
CCC_Buffer const *: CCC_buffer_end, \
636
CCC_Flat_hash_map const *: CCC_flat_hash_map_end, \
637
CCC_Adaptive_map const *: CCC_adaptive_map_end, \
638
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_end, \
639
CCC_Flat_double_ended_queue const *: CCC_flat_double_ended_queue_end, \
640
CCC_Singly_linked_list const *: CCC_singly_linked_list_end, \
641
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_end, \
642
CCC_Array_tree_map const *: CCC_array_tree_map_end, \
643
CCC_Tree_map const *: CCC_tree_map_end)((container_pointer))
644
645
#define CCC_private_reverse_end(container_pointer) \
646
_Generic((container_pointer), \
647
CCC_Buffer *: CCC_buffer_reverse_end, \
648
CCC_Adaptive_map *: CCC_adaptive_map_reverse_end, \
649
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reverse_end, \
650
CCC_Flat_double_ended_queue \
651
*: CCC_flat_double_ended_queue_reverse_end, \
652
CCC_Doubly_linked_list *: CCC_doubly_linked_list_reverse_end, \
653
CCC_Tree_map *: CCC_tree_map_reverse_end, \
654
CCC_Array_tree_map *: CCC_array_tree_map_reverse_end, \
655
CCC_Buffer const *: CCC_buffer_reverse_end, \
656
CCC_Adaptive_map const *: CCC_adaptive_map_reverse_end, \
657
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_reverse_end, \
658
CCC_Flat_double_ended_queue const \
659
*: CCC_flat_double_ended_queue_reverse_end, \
660
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_reverse_end, \
661
CCC_Array_tree_map const *: CCC_array_tree_map_reverse_end, \
662
CCC_Tree_map const *: CCC_tree_map_reverse_end)((container_pointer))
663
664
#define CCC_private_equal_range(container_pointer, \
665
begin_and_end_key_pointer...) \
666
_Generic((container_pointer), \
667
CCC_Adaptive_map *: CCC_adaptive_map_equal_range, \
668
CCC_Array_adaptive_map *: CCC_array_adaptive_map_equal_range, \
669
CCC_Array_tree_map *: CCC_array_tree_map_equal_range, \
670
CCC_Array_tree_map const *: CCC_array_tree_map_equal_range, \
671
CCC_Tree_map *: CCC_tree_map_equal_range, \
672
CCC_Tree_map const *: CCC_tree_map_equal_range)( \
673
(container_pointer), begin_and_end_key_pointer)
674
675
#define CCC_private_equal_range_wrap(container_pointer, \
676
begin_and_end_key_pointer...) \
677
_Generic((container_pointer), \
678
CCC_Adaptive_map *: &( \
679
CCC_Range){CCC_adaptive_map_equal_range( \
680
(CCC_Adaptive_map *)(container_pointer), \
681
begin_and_end_key_pointer) \
682
.private}, \
683
CCC_Tree_map *: &(CCC_Range){CCC_tree_map_equal_range( \
684
(CCC_Tree_map *)(container_pointer), \
685
begin_and_end_key_pointer) \
686
.private}, \
687
CCC_Tree_map const *: &( \
688
CCC_Range){CCC_tree_map_equal_range( \
689
(CCC_Tree_map const *)(container_pointer), \
690
begin_and_end_key_pointer) \
691
.private}, \
692
CCC_Array_tree_map *: &( \
693
CCC_Handle_range){CCC_array_tree_map_equal_range( \
694
(CCC_Array_tree_map \
695
*)(container_pointer), \
696
begin_and_end_key_pointer) \
697
.private}, \
698
CCC_Array_tree_map const *: &( \
699
CCC_Handle_range){CCC_array_tree_map_equal_range( \
700
(CCC_Array_tree_map const \
701
*)(container_pointer), \
702
begin_and_end_key_pointer) \
703
.private}, \
704
CCC_Array_adaptive_map *: &(CCC_Handle_range){ \
705
CCC_array_adaptive_map_equal_range( \
706
(CCC_Array_adaptive_map *)(container_pointer), \
707
begin_and_end_key_pointer) \
708
.private})
709
710
#define CCC_private_equal_range_reverse( \
711
container_pointer, reverse_begin_and_reverse_end_key_pointer...) \
712
_Generic((container_pointer), \
713
CCC_Adaptive_map *: CCC_adaptive_map_equal_range_reverse, \
714
CCC_Array_adaptive_map *: CCC_array_adaptive_map_equal_range_reverse, \
715
CCC_Array_tree_map *: CCC_array_tree_map_equal_range_reverse, \
716
CCC_Array_tree_map const *: CCC_array_tree_map_equal_range_reverse, \
717
CCC_Tree_map *: CCC_tree_map_equal_range_reverse, \
718
CCC_Tree_map const *: CCC_tree_map_equal_range_reverse)( \
719
(container_pointer), reverse_begin_and_reverse_end_key_pointer)
720
721
#define CCC_private_equal_range_reverse_wrap(container_pointer, \
722
begin_and_end_key_pointer...) \
723
_Generic( \
724
(container_pointer), \
725
CCC_Adaptive_map *: &( \
726
CCC_Range_reverse){CCC_adaptive_map_equal_range_reverse( \
727
(CCC_Adaptive_map *)(container_pointer), \
728
begin_and_end_key_pointer) \
729
.private}, \
730
CCC_Tree_map *: &( \
731
CCC_Range_reverse){CCC_tree_map_equal_range_reverse( \
732
(CCC_Tree_map *)(container_pointer), \
733
begin_and_end_key_pointer) \
734
.private}, \
735
CCC_Tree_map const *: &( \
736
CCC_Range_reverse){CCC_tree_map_equal_range_reverse( \
737
(CCC_Tree_map const *)(container_pointer), \
738
begin_and_end_key_pointer) \
739
.private}, \
740
CCC_Array_tree_map *: &( \
741
CCC_Handle_range_reverse){CCC_array_tree_map_equal_range_reverse( \
742
(CCC_Array_tree_map \
743
*)(container_pointer), \
744
begin_and_end_key_pointer) \
745
.private}, \
746
CCC_Array_tree_map const *: &( \
747
CCC_Handle_range_reverse){CCC_array_tree_map_equal_range_reverse( \
748
(CCC_Array_tree_map const \
749
*)(container_pointer), \
750
begin_and_end_key_pointer) \
751
.private}, \
752
CCC_Array_adaptive_map *: &(CCC_Handle_range_reverse){ \
753
CCC_array_adaptive_map_equal_range_reverse( \
754
(CCC_Array_adaptive_map *)(container_pointer), \
755
begin_and_end_key_pointer) \
756
.private})
757
762
#ifdef range_begin
763
# undef range_begin
764
#endif
765
#ifdef range_end
766
# undef range_end
767
#endif
768
#ifdef range_reverse_begin
769
# undef range_reverse_begin
770
#endif
771
#ifdef range_reverse_end
772
# undef range_reverse_end
773
#endif
774
775
#define CCC_private_range_begin(range_pointer) \
776
_Generic((range_pointer), \
777
CCC_Range *: CCC_range_begin, \
778
CCC_Range const *: CCC_range_begin, \
779
CCC_Handle_range *: CCC_array_range_begin, \
780
CCC_Handle_range const *: CCC_array_range_begin)((range_pointer))
781
782
#define CCC_private_range_end(range_pointer) \
783
_Generic((range_pointer), \
784
CCC_Range *: CCC_range_end, \
785
CCC_Range const *: CCC_range_end, \
786
CCC_Handle_range *: CCC_array_range_end, \
787
CCC_Handle_range const *: CCC_array_range_end)((range_pointer))
788
789
#define CCC_private_range_reverse_begin(range_reverse_pointer) \
790
_Generic((range_reverse_pointer), \
791
CCC_Range_reverse *: CCC_range_reverse_begin, \
792
CCC_Range_reverse const *: CCC_range_reverse_begin, \
793
CCC_Handle_range_reverse *: CCC_array_range_reverse_begin, \
794
CCC_Handle_range_reverse const *: CCC_array_range_reverse_begin)( \
795
(range_reverse_pointer))
796
797
#define CCC_private_range_reverse_end(range_reverse_pointer) \
798
_Generic((range_reverse_pointer), \
799
CCC_Range_reverse *: CCC_range_reverse_end, \
800
CCC_Range_reverse const *: CCC_range_reverse_end, \
801
CCC_Handle_range_reverse *: CCC_array_range_reverse_end, \
802
CCC_Handle_range_reverse const *: CCC_array_range_reverse_end)( \
803
(range_reverse_pointer))
804
805
#define CCC_private_splice(container_pointer, splice_args...) \
806
_Generic((container_pointer), \
807
CCC_Singly_linked_list *: CCC_singly_linked_list_splice, \
808
CCC_Singly_linked_list const *: CCC_singly_linked_list_splice, \
809
CCC_Doubly_linked_list *: CCC_doubly_linked_list_splice, \
810
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_splice)( \
811
(container_pointer), splice_args)
812
813
#define CCC_private_splice_range(container_pointer, splice_range_args...) \
814
_Generic((container_pointer), \
815
CCC_Singly_linked_list *: CCC_singly_linked_list_splice_range, \
816
CCC_Singly_linked_list const *: CCC_singly_linked_list_splice_range, \
817
CCC_Doubly_linked_list *: CCC_doubly_linked_list_splice_range, \
818
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_splice_range)( \
819
(container_pointer), splice_range_args)
820
821
/*=================== Memory Management =======================*/
822
823
#define CCC_private_copy(destination_container_pointer, \
824
source_container_pointer, allocate_pointer) \
825
_Generic((destination_container_pointer), \
826
CCC_Bitset *: CCC_bitset_copy, \
827
CCC_Flat_hash_map *: CCC_flat_hash_map_copy, \
828
CCC_Array_adaptive_map *: CCC_array_adaptive_map_copy, \
829
CCC_Flat_priority_queue *: CCC_flat_priority_queue_copy, \
830
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_copy, \
831
CCC_Array_tree_map *: CCC_array_tree_map_copy)( \
832
(destination_container_pointer), (source_container_pointer), \
833
(allocate_pointer))
834
835
#define CCC_private_reserve(container_pointer, n_to_add, allocate_pointer) \
836
_Generic((container_pointer), \
837
CCC_Bitset *: CCC_bitset_reserve, \
838
CCC_Buffer *: CCC_buffer_reserve, \
839
CCC_Flat_hash_map *: CCC_flat_hash_map_reserve, \
840
CCC_Array_adaptive_map *: CCC_array_adaptive_map_reserve, \
841
CCC_Flat_priority_queue *: CCC_flat_priority_queue_reserve, \
842
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_reserve, \
843
CCC_Array_tree_map *: CCC_array_tree_map_reserve)( \
844
(container_pointer), (n_to_add), (allocate_pointer))
845
846
#define CCC_private_clear(container_pointer, ...) \
847
_Generic((container_pointer), \
848
CCC_Bitset *: CCC_bitset_clear, \
849
CCC_Buffer *: CCC_buffer_clear, \
850
CCC_Flat_hash_map *: CCC_flat_hash_map_clear, \
851
CCC_Array_adaptive_map *: CCC_array_adaptive_map_clear, \
852
CCC_Flat_priority_queue *: CCC_flat_priority_queue_clear, \
853
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_clear, \
854
CCC_Singly_linked_list *: CCC_singly_linked_list_clear, \
855
CCC_Doubly_linked_list *: CCC_doubly_linked_list_clear, \
856
CCC_Adaptive_map *: CCC_adaptive_map_clear, \
857
CCC_Priority_queue *: CCC_priority_queue_clear, \
858
CCC_Tree_map *: CCC_tree_map_clear, \
859
CCC_Array_tree_map *: CCC_array_tree_map_clear)( \
860
(container_pointer)__VA_OPT__(, __VA_ARGS__))
861
862
#define CCC_private_clear_and_free(container_pointer, ...) \
863
_Generic((container_pointer), \
864
CCC_Bitset *: CCC_bitset_clear_and_free, \
865
CCC_Buffer *: CCC_buffer_clear_and_free, \
866
CCC_Flat_hash_map *: CCC_flat_hash_map_clear_and_free, \
867
CCC_Array_adaptive_map *: CCC_array_adaptive_map_clear_and_free, \
868
CCC_Flat_priority_queue *: CCC_flat_priority_queue_clear_and_free, \
869
CCC_Flat_double_ended_queue \
870
*: CCC_flat_double_ended_queue_clear_and_free, \
871
CCC_Array_tree_map *: CCC_array_tree_map_clear_and_free)( \
872
(container_pointer)__VA_OPT__(, __VA_ARGS__))
873
874
#define CCC_private_clear_and_free_reserve(container_pointer, \
875
destructor_and_free_args...) \
876
_Generic((container_pointer), \
877
CCC_Bitset *: CCC_bitset_clear_and_free_reserve, \
878
CCC_Buffer *: CCC_buffer_clear_and_free_reserve, \
879
CCC_Flat_hash_map *: CCC_flat_hash_map_clear_and_free_reserve, \
880
CCC_Array_adaptive_map \
881
*: CCC_array_adaptive_map_clear_and_free_reserve, \
882
CCC_Flat_priority_queue \
883
*: CCC_flat_priority_queue_clear_and_free_reserve, \
884
CCC_Flat_double_ended_queue \
885
*: CCC_flat_double_ended_queue_clear_and_free_reserve, \
886
CCC_Array_tree_map *: CCC_array_tree_map_clear_and_free_reserve)( \
887
(container_pointer), destructor_and_free_args)
888
889
/*=================== Standard Getters Interface =======================*/
890
891
#define CCC_private_count(container_pointer) \
892
_Generic((container_pointer), \
893
CCC_Bitset *: CCC_bitset_count, \
894
CCC_Buffer *: CCC_buffer_count, \
895
CCC_Flat_hash_map *: CCC_flat_hash_map_count, \
896
CCC_Adaptive_map *: CCC_adaptive_map_count, \
897
CCC_Array_adaptive_map *: CCC_array_adaptive_map_count, \
898
CCC_Flat_priority_queue *: CCC_flat_priority_queue_count, \
899
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_count, \
900
CCC_Priority_queue *: CCC_priority_queue_count, \
901
CCC_Singly_linked_list *: CCC_singly_linked_list_count, \
902
CCC_Doubly_linked_list *: CCC_doubly_linked_list_count, \
903
CCC_Tree_map *: CCC_tree_map_count, \
904
CCC_Array_tree_map *: CCC_array_tree_map_count, \
905
CCC_Bitset const *: CCC_bitset_count, \
906
CCC_Buffer const *: CCC_buffer_count, \
907
CCC_Flat_hash_map const *: CCC_flat_hash_map_count, \
908
CCC_Adaptive_map const *: CCC_adaptive_map_count, \
909
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_count, \
910
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_count, \
911
CCC_Flat_double_ended_queue const \
912
*: CCC_flat_double_ended_queue_count, \
913
CCC_Priority_queue const *: CCC_priority_queue_count, \
914
CCC_Singly_linked_list const *: CCC_singly_linked_list_count, \
915
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_count, \
916
CCC_Array_tree_map const *: CCC_array_tree_map_count, \
917
CCC_Tree_map const *: CCC_tree_map_count)((container_pointer))
918
919
#define CCC_private_capacity(container_pointer) \
920
_Generic((container_pointer), \
921
CCC_Bitset *: CCC_bitset_capacity, \
922
CCC_Buffer *: CCC_buffer_capacity, \
923
CCC_Flat_hash_map *: CCC_flat_hash_map_capacity, \
924
CCC_Array_adaptive_map *: CCC_array_adaptive_map_capacity, \
925
CCC_Flat_priority_queue *: CCC_flat_priority_queue_capacity, \
926
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_capacity, \
927
CCC_Array_tree_map *: CCC_array_tree_map_capacity, \
928
CCC_Bitset const *: CCC_bitset_capacity, \
929
CCC_Buffer const *: CCC_buffer_capacity, \
930
CCC_Flat_hash_map const *: CCC_flat_hash_map_capacity, \
931
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_capacity, \
932
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_capacity, \
933
CCC_Flat_double_ended_queue const \
934
*: CCC_flat_double_ended_queue_capacity, \
935
CCC_Array_tree_map const *: CCC_array_tree_map_capacity)( \
936
(container_pointer))
937
938
#define CCC_private_is_empty(container_pointer) \
939
_Generic((container_pointer), \
940
CCC_Bitset *: CCC_bitset_is_empty, \
941
CCC_Buffer *: CCC_buffer_is_empty, \
942
CCC_Flat_hash_map *: CCC_flat_hash_map_is_empty, \
943
CCC_Adaptive_map *: CCC_adaptive_map_is_empty, \
944
CCC_Array_adaptive_map *: CCC_array_adaptive_map_is_empty, \
945
CCC_Flat_priority_queue *: CCC_flat_priority_queue_is_empty, \
946
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_is_empty, \
947
CCC_Priority_queue *: CCC_priority_queue_is_empty, \
948
CCC_Singly_linked_list *: CCC_singly_linked_list_is_empty, \
949
CCC_Doubly_linked_list *: CCC_doubly_linked_list_is_empty, \
950
CCC_Tree_map *: CCC_tree_map_is_empty, \
951
CCC_Array_tree_map *: CCC_array_tree_map_is_empty, \
952
CCC_Bitset const *: CCC_bitset_is_empty, \
953
CCC_Buffer const *: CCC_buffer_is_empty, \
954
CCC_Flat_hash_map const *: CCC_flat_hash_map_is_empty, \
955
CCC_Adaptive_map const *: CCC_adaptive_map_is_empty, \
956
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_is_empty, \
957
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_is_empty, \
958
CCC_Flat_double_ended_queue const \
959
*: CCC_flat_double_ended_queue_is_empty, \
960
CCC_Priority_queue const *: CCC_priority_queue_is_empty, \
961
CCC_Singly_linked_list const *: CCC_singly_linked_list_is_empty, \
962
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_is_empty, \
963
CCC_Array_tree_map const *: CCC_array_tree_map_is_empty, \
964
CCC_Tree_map const *: CCC_tree_map_is_empty)((container_pointer))
965
966
#define CCC_private_validate(container_pointer) \
967
_Generic((container_pointer), \
968
CCC_Flat_hash_map *: CCC_flat_hash_map_validate, \
969
CCC_Adaptive_map *: CCC_adaptive_map_validate, \
970
CCC_Array_adaptive_map *: CCC_array_adaptive_map_validate, \
971
CCC_Flat_priority_queue *: CCC_flat_priority_queue_validate, \
972
CCC_Flat_double_ended_queue *: CCC_flat_double_ended_queue_validate, \
973
CCC_Priority_queue *: CCC_priority_queue_validate, \
974
CCC_Singly_linked_list *: CCC_singly_linked_list_validate, \
975
CCC_Doubly_linked_list *: CCC_doubly_linked_list_validate, \
976
CCC_Tree_map *: CCC_tree_map_validate, \
977
CCC_Array_tree_map *: CCC_array_tree_map_validate, \
978
CCC_Flat_hash_map const *: CCC_flat_hash_map_validate, \
979
CCC_Adaptive_map const *: CCC_adaptive_map_validate, \
980
CCC_Array_adaptive_map const *: CCC_array_adaptive_map_validate, \
981
CCC_Flat_priority_queue const *: CCC_flat_priority_queue_validate, \
982
CCC_Flat_double_ended_queue const \
983
*: CCC_flat_double_ended_queue_validate, \
984
CCC_Priority_queue const *: CCC_priority_queue_validate, \
985
CCC_Singly_linked_list const *: CCC_singly_linked_list_validate, \
986
CCC_Doubly_linked_list const *: CCC_doubly_linked_list_validate, \
987
CCC_Array_tree_map const *: CCC_array_tree_map_validate, \
988
CCC_Tree_map const *: CCC_tree_map_validate)((container_pointer))
989
990
#endif
/* CCC_PRIVATE_TRAITS_H */
ccc
private
private_traits.h
Generated by
1.9.6