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 */