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