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