C Container Collection (CCC)
Loading...
Searching...
No Matches
impl_traits.h
1#ifndef CCC_IMPL_TRAITS_H
2#define CCC_IMPL_TRAITS_H
3
4/* NOLINTBEGIN */
5#include "../buffer.h"
6#include "../doubly_linked_list.h"
7#include "../flat_double_ended_queue.h"
8#include "../flat_hash_map.h"
9#include "../flat_priority_queue.h"
10#include "../handle_hash_map.h"
11#include "../handle_ordered_map.h"
12#include "../handle_realtime_ordered_map.h"
13#include "../ordered_map.h"
14#include "../ordered_multimap.h"
15#include "../priority_queue.h"
16#include "../realtime_ordered_map.h"
17#include "../singly_linked_list.h"
18#include "../types.h"
19/* NOLINTEND */
20
21/*==================== Entry/Handle Interface =========================*/
22
23#define ccc_impl_swap_entry(container_ptr, swap_args...) \
24 _Generic((container_ptr), \
25 ccc_flat_hash_map *: ccc_fhm_swap_entry, \
26 ccc_ordered_map *: ccc_om_swap_entry, \
27 ccc_ordered_multimap *: ccc_omm_swap_entry, \
28 ccc_realtime_ordered_map *: ccc_rom_swap_entry)((container_ptr), \
29 swap_args)
30
31#define ccc_impl_swap_entry_r(container_ptr, key_val_container_handle_ptr...) \
32 &(ccc_entry) \
33 { \
34 ccc_impl_swap_entry(container_ptr, key_val_container_handle_ptr).impl_ \
35 }
36
37#define ccc_impl_swap_handle(container_ptr, swap_args...) \
38 _Generic((container_ptr), \
39 ccc_handle_hash_map *: ccc_hhm_swap_handle, \
40 ccc_handle_ordered_map *: ccc_hom_swap_handle, \
41 ccc_handle_realtime_ordered_map \
42 *: ccc_hrm_swap_handle)((container_ptr), swap_args)
43
44#define ccc_impl_swap_handle_r(container_ptr, key_val_container_handle_ptr...) \
45 &(ccc_handle) \
46 { \
47 ccc_impl_swap_handle(container_ptr, key_val_container_handle_ptr) \
48 .impl_ \
49 }
50
51#define ccc_impl_try_insert(container_ptr, try_insert_args...) \
52 _Generic((container_ptr), \
53 ccc_handle_hash_map *: ccc_hhm_try_insert, \
54 ccc_handle_ordered_map *: ccc_hom_try_insert, \
55 ccc_handle_realtime_ordered_map *: ccc_hrm_try_insert, \
56 ccc_flat_hash_map *: ccc_fhm_try_insert, \
57 ccc_ordered_map *: ccc_om_try_insert, \
58 ccc_ordered_multimap *: ccc_omm_try_insert, \
59 ccc_realtime_ordered_map *: ccc_rom_try_insert)((container_ptr), \
60 try_insert_args)
61
62#define ccc_impl_try_insert_r(container_ptr, try_insert_args...) \
63 _Generic((container_ptr), \
64 ccc_handle_hash_map \
65 *: &(ccc_handle){ccc_hhm_try_insert( \
66 (ccc_handle_hash_map *)container_ptr, \
67 (ccc_hhmap_elem *)try_insert_args) \
68 .impl_}, \
69 ccc_handle_ordered_map \
70 *: &(ccc_handle){ccc_hom_try_insert( \
71 (ccc_handle_ordered_map *)container_ptr, \
72 (ccc_homap_elem *)try_insert_args) \
73 .impl_}, \
74 ccc_handle_realtime_ordered_map \
75 *: &(ccc_handle){ccc_hrm_try_insert( \
76 (ccc_handle_realtime_ordered_map *) \
77 container_ptr, \
78 (ccc_hromap_elem *)try_insert_args) \
79 .impl_}, \
80 ccc_flat_hash_map \
81 *: &(ccc_entry){ccc_fhm_try_insert( \
82 (ccc_flat_hash_map *)container_ptr, \
83 (ccc_fhmap_elem *)try_insert_args) \
84 .impl_}, \
85 ccc_ordered_map \
86 *: &( \
87 ccc_entry){ccc_om_try_insert((ccc_ordered_map *)container_ptr, \
88 (ccc_omap_elem *)try_insert_args) \
89 .impl_}, \
90 ccc_ordered_multimap \
91 *: &(ccc_entry){ccc_omm_try_insert( \
92 (ccc_ordered_multimap *)container_ptr, \
93 (ccc_ommap_elem *)try_insert_args) \
94 .impl_}, \
95 ccc_realtime_ordered_map \
96 *: &(ccc_entry){ \
97 ccc_rom_try_insert((ccc_realtime_ordered_map *)container_ptr, \
98 (ccc_romap_elem *)try_insert_args) \
99 .impl_})
100
101#define ccc_impl_insert_or_assign(container_ptr, insert_or_assign_args...) \
102 _Generic((container_ptr), \
103 ccc_handle_hash_map *: ccc_hhm_insert_or_assign, \
104 ccc_handle_ordered_map *: ccc_hom_insert_or_assign, \
105 ccc_handle_realtime_ordered_map *: ccc_hrm_insert_or_assign, \
106 ccc_flat_hash_map *: ccc_fhm_insert_or_assign, \
107 ccc_ordered_map *: ccc_om_insert_or_assign, \
108 ccc_ordered_multimap *: ccc_omm_insert_or_assign, \
109 ccc_realtime_ordered_map *: ccc_rom_insert_or_assign)( \
110 (container_ptr), insert_or_assign_args)
111
112#define ccc_impl_insert_or_assign_r(container_ptr, insert_or_assign_args...) \
113 _Generic((container_ptr), \
114 ccc_handle_hash_map \
115 *: &(ccc_handle){ccc_hhm_insert_or_assign( \
116 (ccc_handle_hash_map *)container_ptr, \
117 (ccc_hhmap_elem *)insert_or_assign_args) \
118 .impl_}, \
119 ccc_handle_ordered_map \
120 *: &(ccc_handle){ccc_hom_insert_or_assign( \
121 (ccc_handle_ordered_map *)container_ptr, \
122 (ccc_homap_elem *)insert_or_assign_args) \
123 .impl_}, \
124 ccc_handle_realtime_ordered_map \
125 *: &(ccc_handle){ccc_hrm_insert_or_assign( \
126 (ccc_handle_realtime_ordered_map *) \
127 container_ptr, \
128 (ccc_hromap_elem *)insert_or_assign_args) \
129 .impl_}, \
130 ccc_flat_hash_map \
131 *: &(ccc_entry){ccc_fhm_insert_or_assign( \
132 (ccc_flat_hash_map *)container_ptr, \
133 (ccc_fhmap_elem *)insert_or_assign_args) \
134 .impl_}, \
135 ccc_ordered_map \
136 *: &(ccc_entry){ccc_om_insert_or_assign( \
137 (ccc_ordered_map *)container_ptr, \
138 (ccc_omap_elem *)insert_or_assign_args) \
139 .impl_}, \
140 ccc_ordered_multimap \
141 *: &(ccc_entry){ccc_omm_insert_or_assign( \
142 (ccc_ordered_multimap *)container_ptr, \
143 (ccc_ommap_elem *)insert_or_assign_args) \
144 .impl_}, \
145 ccc_realtime_ordered_map \
146 *: &(ccc_entry){ccc_rom_insert_or_assign( \
147 (ccc_realtime_ordered_map *)container_ptr, \
148 (ccc_romap_elem *)insert_or_assign_args) \
149 .impl_})
150
151#define ccc_impl_remove(container_ptr, key_val_container_handle_ptr...) \
152 _Generic((container_ptr), \
153 ccc_handle_hash_map *: ccc_hhm_remove, \
154 ccc_handle_ordered_map *: ccc_hom_remove, \
155 ccc_handle_realtime_ordered_map *: ccc_hrm_remove, \
156 ccc_flat_hash_map *: ccc_fhm_remove, \
157 ccc_ordered_map *: ccc_om_remove, \
158 ccc_ordered_multimap *: ccc_omm_remove, \
159 ccc_realtime_ordered_map \
160 *: ccc_rom_remove)((container_ptr), key_val_container_handle_ptr)
161
162#define ccc_impl_remove_r(container_ptr, key_val_container_handle_ptr...) \
163 _Generic((container_ptr), \
164 ccc_handle_hash_map \
165 *: &(ccc_handle){ccc_hhm_remove( \
166 (ccc_handle_hash_map *)container_ptr, \
167 (ccc_hhmap_elem *) \
168 key_val_container_handle_ptr) \
169 .impl_}, \
170 ccc_handle_ordered_map \
171 *: &(ccc_handle){ccc_hom_remove( \
172 (ccc_handle_ordered_map *)container_ptr, \
173 (ccc_homap_elem *) \
174 key_val_container_handle_ptr) \
175 .impl_}, \
176 ccc_handle_realtime_ordered_map \
177 *: &( \
178 ccc_handle){ccc_hrm_remove((ccc_handle_realtime_ordered_map *) \
179 container_ptr, \
180 (ccc_hromap_elem *) \
181 key_val_container_handle_ptr) \
182 .impl_}, \
183 ccc_flat_hash_map \
184 *: &(ccc_entry){ccc_fhm_remove((ccc_flat_hash_map *)container_ptr, \
185 (ccc_fhmap_elem *) \
186 key_val_container_handle_ptr) \
187 .impl_}, \
188 ccc_ordered_map \
189 *: &(ccc_entry){ccc_om_remove( \
190 (ccc_ordered_map *)container_ptr, \
191 (ccc_omap_elem *)key_val_container_handle_ptr) \
192 .impl_}, \
193 ccc_ordered_multimap \
194 *: &( \
195 ccc_entry){ccc_omm_remove( \
196 (ccc_ordered_multimap *)container_ptr, \
197 (ccc_ommap_elem *)key_val_container_handle_ptr) \
198 .impl_}, \
199 ccc_realtime_ordered_map \
200 *: &(ccc_entry){ \
201 ccc_rom_remove((ccc_realtime_ordered_map *)container_ptr, \
202 (ccc_romap_elem *)key_val_container_handle_ptr) \
203 .impl_})
204
205#define ccc_impl_remove_entry(container_entry_ptr) \
206 _Generic((container_entry_ptr), \
207 ccc_fhmap_entry *: ccc_fhm_remove_entry, \
208 ccc_omap_entry *: ccc_om_remove_entry, \
209 ccc_ommap_entry *: ccc_omm_remove_entry, \
210 ccc_romap_entry *: ccc_rom_remove_entry, \
211 ccc_fhmap_entry const *: ccc_fhm_remove_entry, \
212 ccc_omap_entry const *: ccc_om_remove_entry, \
213 ccc_romap_entry const *: ccc_rom_remove_entry)((container_entry_ptr))
214
215#define ccc_impl_remove_entry_r(container_entry_ptr) \
216 &(ccc_entry) \
217 { \
218 ccc_impl_remove_entry(container_entry_ptr).impl_ \
219 }
220
221#define ccc_impl_remove_handle(container_handle_ptr) \
222 _Generic((container_handle_ptr), \
223 ccc_homap_handle *: ccc_hom_remove_handle, \
224 ccc_homap_handle const *: ccc_hom_remove_handle, \
225 ccc_hromap_handle *: ccc_hrm_remove_handle, \
226 ccc_hromap_handle const *: ccc_hrm_remove_handle, \
227 ccc_hhmap_handle *: ccc_hhm_remove_handle, \
228 ccc_hhmap_handle const *: ccc_hhm_remove_handle)( \
229 (container_handle_ptr))
230
231#define ccc_impl_remove_handle_r(container_handle_ptr) \
232 &(ccc_handle) \
233 { \
234 ccc_impl_remove_handle(container_handle_ptr).impl_ \
235 }
236
237#define ccc_impl_entry(container_ptr, key_ptr...) \
238 _Generic((container_ptr), \
239 ccc_flat_hash_map *: ccc_fhm_entry, \
240 ccc_flat_hash_map const *: ccc_fhm_entry, \
241 ccc_ordered_map *: ccc_om_entry, \
242 ccc_ordered_multimap *: ccc_omm_entry, \
243 ccc_realtime_ordered_map *: ccc_rom_entry, \
244 ccc_realtime_ordered_map const *: ccc_rom_entry)((container_ptr), \
245 key_ptr)
246
247#define ccc_impl_entry_r(container_ptr, key_ptr...) \
248 _Generic((container_ptr), \
249 ccc_flat_hash_map \
250 *: &(ccc_fhmap_entry){ccc_fhm_entry( \
251 (ccc_flat_hash_map *)(container_ptr), \
252 key_ptr) \
253 .impl_}, \
254 ccc_flat_hash_map const *: &( \
255 ccc_fhmap_entry){ccc_fhm_entry( \
256 (ccc_flat_hash_map *)(container_ptr), \
257 key_ptr) \
258 .impl_}, \
259 ccc_ordered_map *: &( \
260 ccc_omap_entry){ccc_om_entry( \
261 (ccc_ordered_map *)(container_ptr), \
262 key_ptr) \
263 .impl_}, \
264 ccc_ordered_multimap *: &( \
265 ccc_ommap_entry){ccc_omm_entry( \
266 (ccc_ordered_multimap *)(container_ptr), \
267 key_ptr) \
268 .impl_}, \
269 ccc_realtime_ordered_map *: &( \
270 ccc_romap_entry){ccc_rom_entry((ccc_realtime_ordered_map \
271 *)(container_ptr), \
272 key_ptr) \
273 .impl_}, \
274 ccc_realtime_ordered_map const *: &(ccc_romap_entry){ \
275 ccc_rom_entry((ccc_realtime_ordered_map *)(container_ptr), \
276 key_ptr) \
277 .impl_})
278
279#define ccc_impl_handle(container_ptr, key_ptr...) \
280 _Generic((container_ptr), \
281 ccc_handle_ordered_map *: ccc_hom_handle, \
282 ccc_handle_realtime_ordered_map *: ccc_hrm_handle, \
283 ccc_handle_realtime_ordered_map const *: ccc_hrm_handle, \
284 ccc_handle_hash_map *: ccc_hhm_handle, \
285 ccc_handle_hash_map const *: ccc_hhm_handle)((container_ptr), key_ptr)
286
287#define ccc_impl_handle_r(container_ptr, key_ptr...) \
288 _Generic((container_ptr), \
289 ccc_handle_ordered_map \
290 *: &(ccc_homap_handle){ccc_hom_handle((ccc_handle_ordered_map \
291 *)(container_ptr), \
292 key_ptr) \
293 .impl_}, \
294 ccc_handle_realtime_ordered_map \
295 *: &(ccc_hromap_handle){ccc_hrm_handle( \
296 (ccc_handle_realtime_ordered_map \
297 *)(container_ptr), \
298 key_ptr) \
299 .impl_}, \
300 ccc_handle_realtime_ordered_map const *: &( \
301 ccc_hromap_handle){ccc_hrm_handle( \
302 (ccc_handle_realtime_ordered_map \
303 *)(container_ptr), \
304 key_ptr) \
305 .impl_}, \
306 ccc_handle_hash_map *: &( \
307 ccc_hhmap_handle){ccc_hhm_handle( \
308 (ccc_handle_hash_map *)(container_ptr), \
309 key_ptr) \
310 .impl_}, \
311 ccc_handle_hash_map const *: &(ccc_hhmap_handle){ \
312 ccc_hhm_handle((ccc_handle_hash_map *)(container_ptr), key_ptr) \
313 .impl_})
314
315#define ccc_impl_and_modify(container_entry_ptr, mod_fn) \
316 _Generic((container_entry_ptr), \
317 ccc_fhmap_entry *: ccc_fhm_and_modify, \
318 ccc_hhmap_handle *: ccc_hhm_and_modify, \
319 ccc_omap_entry *: ccc_om_and_modify, \
320 ccc_ommap_entry *: ccc_omm_and_modify, \
321 ccc_homap_handle *: ccc_hom_and_modify, \
322 ccc_romap_entry *: ccc_rom_and_modify, \
323 ccc_hromap_handle *: ccc_hrm_and_modify, \
324 ccc_fhmap_entry const *: ccc_fhm_and_modify, \
325 ccc_hhmap_handle const *: ccc_hhm_and_modify, \
326 ccc_hromap_handle const *: ccc_hrm_and_modify, \
327 ccc_omap_entry const *: ccc_om_and_modify, \
328 ccc_ommap_entry const *: ccc_omm_and_modify, \
329 ccc_homap_handle const *: ccc_hom_and_modify, \
330 ccc_romap_entry const *: ccc_rom_and_modify)((container_entry_ptr), \
331 (mod_fn))
332
333#define ccc_impl_and_modify_aux(container_entry_ptr, mod_fn, aux_data_ptr...) \
334 _Generic((container_entry_ptr), \
335 ccc_fhmap_entry *: ccc_fhm_and_modify_aux, \
336 ccc_hhmap_handle *: ccc_hhm_and_modify_aux, \
337 ccc_omap_entry *: ccc_om_and_modify_aux, \
338 ccc_ommap_entry *: ccc_omm_and_modify_aux, \
339 ccc_homap_handle *: ccc_hom_and_modify_aux, \
340 ccc_hromap_handle *: ccc_hrm_and_modify_aux, \
341 ccc_romap_entry *: ccc_rom_and_modify_aux, \
342 ccc_fhmap_entry const *: ccc_fhm_and_modify_aux, \
343 ccc_hhmap_handle const *: ccc_hhm_and_modify_aux, \
344 ccc_omap_entry const *: ccc_om_and_modify_aux, \
345 ccc_ommap_entry const *: ccc_omm_and_modify_aux, \
346 ccc_hromap_handle const *: ccc_hrm_and_modify_aux, \
347 ccc_homap_handle const *: ccc_hom_and_modify_aux, \
348 ccc_romap_entry const *: ccc_rom_and_modify_aux)( \
349 (container_entry_ptr), (mod_fn), aux_data_ptr)
350
351#define ccc_impl_insert_entry(container_entry_ptr, \
352 key_val_container_handle_ptr...) \
353 _Generic((container_entry_ptr), \
354 ccc_fhmap_entry *: ccc_fhm_insert_entry, \
355 ccc_omap_entry *: ccc_om_insert_entry, \
356 ccc_ommap_entry *: ccc_omm_insert_entry, \
357 ccc_romap_entry *: ccc_rom_insert_entry, \
358 ccc_fhmap_entry const *: ccc_fhm_insert_entry, \
359 ccc_omap_entry const *: ccc_om_insert_entry, \
360 ccc_ommap_entry const *: ccc_omm_insert_entry, \
361 ccc_romap_entry const *: ccc_rom_insert_entry)( \
362 (container_entry_ptr), key_val_container_handle_ptr)
363
364#define ccc_impl_insert_handle(container_handle_ptr, \
365 key_val_container_handle_ptr...) \
366 _Generic((container_handle_ptr), \
367 ccc_homap_handle *: ccc_hom_insert_handle, \
368 ccc_hromap_handle *: ccc_hrm_insert_handle, \
369 ccc_hromap_handle const *: ccc_hrm_insert_handle, \
370 ccc_hhmap_handle *: ccc_hhm_insert_handle, \
371 ccc_hhmap_handle const *: ccc_hhm_insert_handle)( \
372 (container_handle_ptr), key_val_container_handle_ptr)
373
374#define ccc_impl_or_insert(container_entry_ptr, \
375 key_val_container_handle_ptr...) \
376 _Generic((container_entry_ptr), \
377 ccc_fhmap_entry *: ccc_fhm_or_insert, \
378 ccc_hhmap_handle *: ccc_hhm_or_insert, \
379 ccc_omap_entry *: ccc_om_or_insert, \
380 ccc_ommap_entry *: ccc_omm_or_insert, \
381 ccc_homap_handle *: ccc_hom_or_insert, \
382 ccc_romap_entry *: ccc_rom_or_insert, \
383 ccc_hromap_handle *: ccc_hrm_or_insert, \
384 ccc_fhmap_entry const *: ccc_fhm_or_insert, \
385 ccc_hhmap_handle const *: ccc_hhm_or_insert, \
386 ccc_omap_entry const *: ccc_om_or_insert, \
387 ccc_ommap_entry const *: ccc_omm_or_insert, \
388 ccc_hromap_handle const *: ccc_hrm_or_insert, \
389 ccc_homap_handle const *: ccc_hom_or_insert, \
390 ccc_romap_entry const *: ccc_rom_or_insert)( \
391 (container_entry_ptr), key_val_container_handle_ptr)
392
393#define ccc_impl_unwrap(container_entry_ptr) \
394 _Generic((container_entry_ptr), \
395 ccc_entry *: ccc_entry_unwrap, \
396 ccc_entry const *: ccc_entry_unwrap, \
397 ccc_handle *: ccc_handle_unwrap, \
398 ccc_handle const *: ccc_handle_unwrap, \
399 ccc_fhmap_entry *: ccc_fhm_unwrap, \
400 ccc_fhmap_entry const *: ccc_fhm_unwrap, \
401 ccc_hhmap_handle *: ccc_hhm_unwrap, \
402 ccc_hhmap_handle const *: ccc_hhm_unwrap, \
403 ccc_omap_entry *: ccc_om_unwrap, \
404 ccc_omap_entry const *: ccc_om_unwrap, \
405 ccc_ommap_entry *: ccc_omm_unwrap, \
406 ccc_ommap_entry const *: ccc_omm_unwrap, \
407 ccc_homap_handle *: ccc_hom_unwrap, \
408 ccc_homap_handle const *: ccc_hom_unwrap, \
409 ccc_hromap_handle *: ccc_hrm_unwrap, \
410 ccc_hromap_handle const *: ccc_hrm_unwrap, \
411 ccc_romap_entry *: ccc_rom_unwrap, \
412 ccc_romap_entry const *: ccc_rom_unwrap)((container_entry_ptr))
413
414#define ccc_impl_occupied(container_entry_ptr) \
415 _Generic((container_entry_ptr), \
416 ccc_entry *: ccc_entry_occupied, \
417 ccc_entry const *: ccc_entry_occupied, \
418 ccc_handle *: ccc_handle_occupied, \
419 ccc_handle const *: ccc_handle_occupied, \
420 ccc_fhmap_entry *: ccc_fhm_occupied, \
421 ccc_fhmap_entry const *: ccc_fhm_occupied, \
422 ccc_hhmap_handle *: ccc_hhm_occupied, \
423 ccc_hhmap_handle const *: ccc_hhm_occupied, \
424 ccc_omap_entry *: ccc_om_occupied, \
425 ccc_omap_entry const *: ccc_om_occupied, \
426 ccc_ommap_entry *: ccc_omm_occupied, \
427 ccc_ommap_entry const *: ccc_omm_occupied, \
428 ccc_homap_handle *: ccc_hom_occupied, \
429 ccc_homap_handle const *: ccc_hom_occupied, \
430 ccc_hromap_handle *: ccc_hrm_occupied, \
431 ccc_hromap_handle const *: ccc_hrm_occupied, \
432 ccc_romap_entry *: ccc_rom_occupied, \
433 ccc_romap_entry const *: ccc_rom_occupied)((container_entry_ptr))
434
435#define ccc_impl_insert_error(container_entry_ptr) \
436 _Generic((container_entry_ptr), \
437 ccc_entry *: ccc_entry_insert_error, \
438 ccc_entry const *: ccc_entry_insert_error, \
439 ccc_handle *: ccc_handle_insert_error, \
440 ccc_handle const *: ccc_handle_insert_error, \
441 ccc_fhmap_entry *: ccc_fhm_insert_error, \
442 ccc_fhmap_entry const *: ccc_fhm_insert_error, \
443 ccc_hhmap_handle *: ccc_hhm_insert_error, \
444 ccc_hhmap_handle const *: ccc_hhm_insert_error, \
445 ccc_omap_entry *: ccc_om_insert_error, \
446 ccc_omap_entry const *: ccc_om_insert_error, \
447 ccc_ommap_entry *: ccc_omm_insert_error, \
448 ccc_ommap_entry const *: ccc_omm_insert_error, \
449 ccc_homap_handle *: ccc_hom_insert_error, \
450 ccc_homap_handle const *: ccc_hom_insert_error, \
451 ccc_hromap_handle *: ccc_hrm_insert_error, \
452 ccc_hromap_handle const *: ccc_hrm_insert_error, \
453 ccc_romap_entry *: ccc_rom_insert_error, \
454 ccc_romap_entry const *: ccc_rom_insert_error)((container_entry_ptr))
455
456/*====================== Misc Search Interface ===========================*/
457
458#define ccc_impl_get_key_val(container_ptr, key_ptr...) \
459 _Generic((container_ptr), \
460 ccc_flat_hash_map *: ccc_fhm_get_key_val, \
461 ccc_flat_hash_map const *: ccc_fhm_get_key_val, \
462 ccc_handle_hash_map *: ccc_hhm_get_key_val, \
463 ccc_handle_hash_map const *: ccc_hhm_get_key_val, \
464 ccc_ordered_map *: ccc_om_get_key_val, \
465 ccc_ordered_multimap *: ccc_omm_get_key_val, \
466 ccc_handle_ordered_map *: ccc_hom_get_key_val, \
467 ccc_handle_realtime_ordered_map *: ccc_hrm_get_key_val, \
468 ccc_handle_realtime_ordered_map const *: ccc_hrm_get_key_val, \
469 ccc_realtime_ordered_map *: ccc_rom_get_key_val, \
470 ccc_realtime_ordered_map const *: ccc_rom_get_key_val)( \
471 (container_ptr), key_ptr)
472
473#define ccc_impl_contains(container_ptr, key_ptr...) \
474 _Generic((container_ptr), \
475 ccc_flat_hash_map *: ccc_fhm_contains, \
476 ccc_flat_hash_map const *: ccc_fhm_contains, \
477 ccc_handle_hash_map *: ccc_hhm_contains, \
478 ccc_handle_hash_map const *: ccc_hhm_contains, \
479 ccc_ordered_map *: ccc_om_contains, \
480 ccc_handle_ordered_map *: ccc_hom_contains, \
481 ccc_handle_realtime_ordered_map *: ccc_hrm_contains, \
482 ccc_handle_realtime_ordered_map const *: ccc_hrm_contains, \
483 ccc_realtime_ordered_map *: ccc_rom_contains, \
484 ccc_realtime_ordered_map const *: ccc_rom_contains, \
485 ccc_ordered_multimap *: ccc_omm_contains)((container_ptr), key_ptr)
486
487/*================ Sequential Containers Interface =====================*/
488
489#define ccc_impl_push(container_ptr, container_handle_ptr...) \
490 _Generic((container_ptr), \
491 ccc_flat_priority_queue *: ccc_fpq_push, \
492 ccc_priority_queue *: ccc_pq_push)((container_ptr), \
493 container_handle_ptr)
494
495#define ccc_impl_push_back(container_ptr, container_handle_ptr...) \
496 _Generic((container_ptr), \
497 ccc_flat_double_ended_queue *: ccc_fdeq_push_back, \
498 ccc_doubly_linked_list *: ccc_dll_push_back, \
499 ccc_buffer *: ccc_buf_push_back)((container_ptr), \
500 container_handle_ptr)
501
502#define ccc_impl_push_front(container_ptr, container_handle_ptr...) \
503 _Generic((container_ptr), \
504 ccc_flat_double_ended_queue *: ccc_fdeq_push_front, \
505 ccc_doubly_linked_list *: ccc_dll_push_front, \
506 ccc_singly_linked_list *: ccc_sll_push_front)((container_ptr), \
507 container_handle_ptr)
508
509#define ccc_impl_pop(container_ptr) \
510 _Generic((container_ptr), \
511 ccc_flat_priority_queue *: ccc_fpq_pop, \
512 ccc_priority_queue *: ccc_pq_pop)((container_ptr))
513
514#define ccc_impl_pop_front(container_ptr) \
515 _Generic((container_ptr), \
516 ccc_flat_double_ended_queue *: ccc_fdeq_pop_front, \
517 ccc_doubly_linked_list *: ccc_dll_pop_front, \
518 ccc_singly_linked_list *: ccc_sll_pop_front)((container_ptr))
519
520#define ccc_impl_pop_back(container_ptr) \
521 _Generic((container_ptr), \
522 ccc_flat_double_ended_queue *: ccc_fdeq_pop_back, \
523 ccc_doubly_linked_list *: ccc_dll_pop_back, \
524 ccc_buffer *: ccc_buf_pop_back)((container_ptr))
525
526#define ccc_impl_front(container_ptr) \
527 _Generic((container_ptr), \
528 ccc_flat_double_ended_queue *: ccc_fdeq_front, \
529 ccc_doubly_linked_list *: ccc_dll_front, \
530 ccc_flat_priority_queue *: ccc_fpq_front, \
531 ccc_priority_queue *: ccc_pq_front, \
532 ccc_singly_linked_list *: ccc_sll_front, \
533 ccc_flat_double_ended_queue const *: ccc_fdeq_front, \
534 ccc_doubly_linked_list const *: ccc_dll_front, \
535 ccc_flat_priority_queue const *: ccc_fpq_front, \
536 ccc_priority_queue const *: ccc_pq_front, \
537 ccc_singly_linked_list const *: ccc_sll_front)((container_ptr))
538
539#define ccc_impl_back(container_ptr) \
540 _Generic((container_ptr), \
541 ccc_flat_double_ended_queue *: ccc_fdeq_back, \
542 ccc_doubly_linked_list *: ccc_dll_back, \
543 ccc_buffer *: ccc_buf_back, \
544 ccc_flat_double_ended_queue const *: ccc_fdeq_back, \
545 ccc_doubly_linked_list const *: ccc_dll_back, \
546 ccc_buffer const *: ccc_buf_back)((container_ptr))
547
548/*================ Priority Queue Update Interface =====================*/
549
550#define ccc_impl_update(container_ptr, update_args...) \
551 _Generic((container_ptr), \
552 ccc_ordered_multimap *: ccc_omm_update, \
553 ccc_flat_priority_queue *: ccc_fpq_update, \
554 ccc_priority_queue *: ccc_pq_update)((container_ptr), update_args)
555
556#define ccc_impl_increase(container_ptr, increase_args...) \
557 _Generic((container_ptr), \
558 ccc_ordered_multimap *: ccc_omm_increase, \
559 ccc_flat_priority_queue *: ccc_fpq_increase, \
560 ccc_priority_queue *: ccc_pq_increase)((container_ptr), increase_args)
561
562#define ccc_impl_decrease(container_ptr, decrease_args...) \
563 _Generic((container_ptr), \
564 ccc_ordered_multimap *: ccc_omm_decrease, \
565 ccc_flat_priority_queue *: ccc_fpq_decrease, \
566 ccc_priority_queue *: ccc_pq_decrease)((container_ptr), decrease_args)
567
568#define ccc_impl_extract(container_ptr, container_handle_ptr...) \
569 _Generic((container_ptr), \
570 ccc_ordered_multimap *: ccc_omm_extract, \
571 ccc_doubly_linked_list *: ccc_dll_extract, \
572 ccc_singly_linked_list *: ccc_sll_extract, \
573 ccc_priority_queue *: ccc_pq_extract)((container_ptr), \
574 container_handle_ptr)
575
576#define ccc_impl_erase(container_ptr, container_handle_ptr...) \
577 _Generic((container_ptr), ccc_flat_priority_queue *: ccc_fpq_erase)( \
578 (container_ptr), container_handle_ptr)
579
580#define ccc_impl_extract_range(container_ptr, \
581 container_handle_begin_end_ptr...) \
582 _Generic((container_ptr), \
583 ccc_doubly_linked_list *: ccc_dll_extract_range, \
584 ccc_singly_linked_list *: ccc_sll_extract_range)( \
585 (container_ptr), container_handle_begin_end_ptr)
586
587/*=================== Iterators Interface ==============================*/
588
589#define ccc_impl_begin(container_ptr) \
590 _Generic((container_ptr), \
591 ccc_buffer *: ccc_buf_begin, \
592 ccc_flat_hash_map *: ccc_fhm_begin, \
593 ccc_ordered_map *: ccc_om_begin, \
594 ccc_handle_ordered_map *: ccc_hom_begin, \
595 ccc_flat_double_ended_queue *: ccc_fdeq_begin, \
596 ccc_ordered_multimap *: ccc_omm_begin, \
597 ccc_singly_linked_list *: ccc_sll_begin, \
598 ccc_doubly_linked_list *: ccc_dll_begin, \
599 ccc_realtime_ordered_map *: ccc_rom_begin, \
600 ccc_handle_realtime_ordered_map *: ccc_hrm_begin, \
601 ccc_buffer const *: ccc_buf_begin, \
602 ccc_flat_hash_map const *: ccc_fhm_begin, \
603 ccc_ordered_map const *: ccc_om_begin, \
604 ccc_handle_ordered_map const *: ccc_hom_begin, \
605 ccc_flat_double_ended_queue const *: ccc_fdeq_begin, \
606 ccc_ordered_multimap const *: ccc_omm_begin, \
607 ccc_singly_linked_list const *: ccc_sll_begin, \
608 ccc_doubly_linked_list const *: ccc_dll_begin, \
609 ccc_handle_realtime_ordered_map const *: ccc_hrm_begin, \
610 ccc_realtime_ordered_map const *: ccc_rom_begin)((container_ptr))
611
612#define ccc_impl_rbegin(container_ptr) \
613 _Generic((container_ptr), \
614 ccc_buffer *: ccc_buf_rbegin, \
615 ccc_ordered_map *: ccc_om_rbegin, \
616 ccc_handle_ordered_map *: ccc_hom_rbegin, \
617 ccc_flat_double_ended_queue *: ccc_fdeq_rbegin, \
618 ccc_ordered_multimap *: ccc_omm_rbegin, \
619 ccc_doubly_linked_list *: ccc_dll_rbegin, \
620 ccc_realtime_ordered_map *: ccc_rom_rbegin, \
621 ccc_handle_realtime_ordered_map *: ccc_hrm_rbegin, \
622 ccc_buffer const *: ccc_buf_rbegin, \
623 ccc_ordered_map const *: ccc_om_rbegin, \
624 ccc_handle_ordered_map const *: ccc_hom_rbegin, \
625 ccc_flat_double_ended_queue const *: ccc_fdeq_rbegin, \
626 ccc_ordered_multimap const *: ccc_omm_rbegin, \
627 ccc_doubly_linked_list const *: ccc_dll_rbegin, \
628 ccc_handle_realtime_ordered_map const *: ccc_hrm_rbegin, \
629 ccc_realtime_ordered_map const *: ccc_rom_rbegin)((container_ptr))
630
631#define ccc_impl_next(container_ptr, void_iter_ptr) \
632 _Generic((container_ptr), \
633 ccc_buffer *: ccc_buf_next, \
634 ccc_flat_hash_map *: ccc_fhm_next, \
635 ccc_ordered_map *: ccc_om_next, \
636 ccc_handle_ordered_map *: ccc_hom_next, \
637 ccc_flat_double_ended_queue *: ccc_fdeq_next, \
638 ccc_ordered_multimap *: ccc_omm_next, \
639 ccc_singly_linked_list *: ccc_sll_next, \
640 ccc_doubly_linked_list *: ccc_dll_next, \
641 ccc_realtime_ordered_map *: ccc_rom_next, \
642 ccc_handle_realtime_ordered_map *: ccc_hrm_next, \
643 ccc_buffer const *: ccc_buf_next, \
644 ccc_flat_hash_map const *: ccc_fhm_next, \
645 ccc_ordered_map const *: ccc_om_next, \
646 ccc_handle_ordered_map const *: ccc_hom_next, \
647 ccc_flat_double_ended_queue const *: ccc_fdeq_next, \
648 ccc_ordered_multimap const *: ccc_omm_next, \
649 ccc_singly_linked_list const *: ccc_sll_next, \
650 ccc_doubly_linked_list const *: ccc_dll_next, \
651 ccc_handle_realtime_ordered_map const *: ccc_hrm_next, \
652 ccc_realtime_ordered_map const *: ccc_rom_next)((container_ptr), \
653 (void_iter_ptr))
654
655#define ccc_impl_rnext(container_ptr, void_iter_ptr) \
656 _Generic((container_ptr), \
657 ccc_buffer *: ccc_buf_rnext, \
658 ccc_ordered_map *: ccc_om_rnext, \
659 ccc_handle_ordered_map *: ccc_hom_rnext, \
660 ccc_flat_double_ended_queue *: ccc_fdeq_rnext, \
661 ccc_ordered_multimap *: ccc_omm_rnext, \
662 ccc_doubly_linked_list *: ccc_dll_rnext, \
663 ccc_realtime_ordered_map *: ccc_rom_rnext, \
664 ccc_handle_realtime_ordered_map *: ccc_hrm_rnext, \
665 ccc_buffer const *: ccc_buf_rnext, \
666 ccc_ordered_map const *: ccc_om_rnext, \
667 ccc_handle_ordered_map const *: ccc_hom_rnext, \
668 ccc_flat_double_ended_queue const *: ccc_fdeq_rnext, \
669 ccc_ordered_multimap const *: ccc_omm_rnext, \
670 ccc_doubly_linked_list const *: ccc_dll_rnext, \
671 ccc_handle_realtime_ordered_map const *: ccc_hrm_rnext, \
672 ccc_realtime_ordered_map const *: ccc_rom_rnext)((container_ptr), \
673 (void_iter_ptr))
674
675#define ccc_impl_end(container_ptr) \
676 _Generic((container_ptr), \
677 ccc_buffer *: ccc_buf_end, \
678 ccc_flat_hash_map *: ccc_fhm_end, \
679 ccc_ordered_map *: ccc_om_end, \
680 ccc_handle_ordered_map *: ccc_hom_end, \
681 ccc_flat_double_ended_queue *: ccc_fdeq_end, \
682 ccc_ordered_multimap *: ccc_omm_end, \
683 ccc_singly_linked_list *: ccc_sll_end, \
684 ccc_doubly_linked_list *: ccc_dll_end, \
685 ccc_realtime_ordered_map *: ccc_rom_end, \
686 ccc_handle_realtime_ordered_map *: ccc_hrm_end, \
687 ccc_buffer const *: ccc_buf_end, \
688 ccc_flat_hash_map const *: ccc_fhm_end, \
689 ccc_ordered_map const *: ccc_om_end, \
690 ccc_handle_ordered_map const *: ccc_hom_end, \
691 ccc_flat_double_ended_queue const *: ccc_fdeq_end, \
692 ccc_ordered_multimap const *: ccc_omm_end, \
693 ccc_singly_linked_list const *: ccc_sll_end, \
694 ccc_doubly_linked_list const *: ccc_dll_end, \
695 ccc_handle_realtime_ordered_map const *: ccc_hrm_end, \
696 ccc_realtime_ordered_map const *: ccc_rom_end)((container_ptr))
697
698#define ccc_impl_rend(container_ptr) \
699 _Generic((container_ptr), \
700 ccc_buffer *: ccc_buf_rend, \
701 ccc_ordered_map *: ccc_om_rend, \
702 ccc_handle_ordered_map *: ccc_hom_rend, \
703 ccc_flat_double_ended_queue *: ccc_fdeq_rend, \
704 ccc_ordered_multimap *: ccc_omm_rend, \
705 ccc_doubly_linked_list *: ccc_dll_rend, \
706 ccc_realtime_ordered_map *: ccc_rom_rend, \
707 ccc_handle_realtime_ordered_map *: ccc_hrm_rend, \
708 ccc_buffer const *: ccc_buf_rend, \
709 ccc_ordered_map const *: ccc_om_rend, \
710 ccc_handle_ordered_map const *: ccc_hom_rend, \
711 ccc_flat_double_ended_queue const *: ccc_fdeq_rend, \
712 ccc_ordered_multimap const *: ccc_omm_rend, \
713 ccc_doubly_linked_list const *: ccc_dll_rend, \
714 ccc_handle_realtime_ordered_map const *: ccc_hrm_rend, \
715 ccc_realtime_ordered_map const *: ccc_rom_rend)((container_ptr))
716
717#define ccc_impl_equal_range(container_ptr, begin_and_end_key_ptr...) \
718 _Generic((container_ptr), \
719 ccc_ordered_map *: ccc_om_equal_range, \
720 ccc_handle_ordered_map *: ccc_hom_equal_range, \
721 ccc_ordered_multimap *: ccc_omm_equal_range, \
722 ccc_handle_realtime_ordered_map *: ccc_hrm_equal_range, \
723 ccc_handle_realtime_ordered_map const *: ccc_hrm_equal_range, \
724 ccc_realtime_ordered_map *: ccc_rom_equal_range, \
725 ccc_realtime_ordered_map const *: ccc_rom_equal_range)( \
726 (container_ptr), begin_and_end_key_ptr)
727
728#define ccc_impl_equal_range_r(container_ptr, begin_and_end_key_ptr...) \
729 &(ccc_range) \
730 { \
731 ccc_impl_equal_range(container_ptr, begin_and_end_key_ptr).impl_ \
732 }
733
734#define ccc_impl_equal_rrange(container_ptr, rbegin_and_rend_key_ptr...) \
735 _Generic((container_ptr), \
736 ccc_ordered_map *: ccc_om_equal_rrange, \
737 ccc_handle_ordered_map *: ccc_hom_equal_rrange, \
738 ccc_ordered_multimap *: ccc_omm_equal_rrange, \
739 ccc_handle_realtime_ordered_map *: ccc_hrm_equal_rrange, \
740 ccc_handle_realtime_ordered_map const *: ccc_hrm_equal_rrange, \
741 ccc_realtime_ordered_map *: ccc_rom_equal_rrange, \
742 ccc_realtime_ordered_map const *: ccc_rom_equal_rrange)( \
743 (container_ptr), rbegin_and_rend_key_ptr)
744
745#define ccc_impl_equal_rrange_r(container_ptr, rbegin_and_rend_key_ptr...) \
746 &(ccc_rrange) \
747 { \
748 ccc_impl_equal_rrange(container_ptr, rbegin_and_rend_key_ptr).impl_ \
749 }
750
751#define ccc_impl_splice(container_ptr, splice_args...) \
752 _Generic((container_ptr), \
753 ccc_singly_linked_list *: ccc_sll_splice, \
754 ccc_singly_linked_list const *: ccc_sll_splice, \
755 ccc_doubly_linked_list *: ccc_dll_splice, \
756 ccc_doubly_linked_list const *: ccc_dll_splice)((container_ptr), \
757 splice_args)
758
759#define ccc_impl_splice_range(container_ptr, splice_range_args...) \
760 _Generic((container_ptr), \
761 ccc_singly_linked_list *: ccc_sll_splice_range, \
762 ccc_singly_linked_list const *: ccc_sll_splice_range, \
763 ccc_doubly_linked_list *: ccc_dll_splice_range, \
764 ccc_doubly_linked_list const *: ccc_dll_splice_range)( \
765 (container_ptr), splice_range_args)
766
767/*=================== Standard Getters Interface =======================*/
768
769#define ccc_impl_size(container_ptr) \
770 _Generic((container_ptr), \
771 ccc_buffer *: ccc_buf_size, \
772 ccc_flat_hash_map *: ccc_fhm_size, \
773 ccc_handle_hash_map *: ccc_hhm_size, \
774 ccc_ordered_map *: ccc_om_size, \
775 ccc_handle_ordered_map *: ccc_hom_size, \
776 ccc_flat_priority_queue *: ccc_fpq_size, \
777 ccc_flat_double_ended_queue *: ccc_fdeq_size, \
778 ccc_ordered_multimap *: ccc_omm_size, \
779 ccc_priority_queue *: ccc_pq_size, \
780 ccc_singly_linked_list *: ccc_sll_size, \
781 ccc_doubly_linked_list *: ccc_dll_size, \
782 ccc_realtime_ordered_map *: ccc_rom_size, \
783 ccc_handle_realtime_ordered_map *: ccc_hrm_size, \
784 ccc_buffer const *: ccc_buf_size, \
785 ccc_flat_hash_map const *: ccc_fhm_size, \
786 ccc_handle_hash_map const *: ccc_hhm_size, \
787 ccc_ordered_map const *: ccc_om_size, \
788 ccc_handle_ordered_map const *: ccc_hom_size, \
789 ccc_flat_priority_queue const *: ccc_fpq_size, \
790 ccc_flat_double_ended_queue const *: ccc_fdeq_size, \
791 ccc_ordered_multimap const *: ccc_omm_size, \
792 ccc_priority_queue const *: ccc_pq_size, \
793 ccc_singly_linked_list const *: ccc_sll_size, \
794 ccc_doubly_linked_list const *: ccc_dll_size, \
795 ccc_handle_realtime_ordered_map const *: ccc_hrm_size, \
796 ccc_realtime_ordered_map const *: ccc_rom_size)((container_ptr))
797
798#define ccc_impl_capacity(container_ptr) \
799 _Generic((container_ptr), \
800 ccc_buffer *: ccc_buf_capacity, \
801 ccc_flat_hash_map *: ccc_fhm_capacity, \
802 ccc_handle_hash_map *: ccc_hhm_capacity, \
803 ccc_handle_ordered_map *: ccc_hom_capacity, \
804 ccc_flat_priority_queue *: ccc_fpq_capacity, \
805 ccc_flat_double_ended_queue *: ccc_fdeq_capacity, \
806 ccc_handle_realtime_ordered_map *: ccc_hrm_capacity, \
807 ccc_buffer const *: ccc_buf_capacity, \
808 ccc_flat_hash_map const *: ccc_fhm_capacity, \
809 ccc_handle_hash_map const *: ccc_hhm_capacity, \
810 ccc_handle_ordered_map const *: ccc_hom_capacity, \
811 ccc_flat_priority_queue const *: ccc_fpq_capacity, \
812 ccc_flat_double_ended_queue const *: ccc_fdeq_capacity, \
813 ccc_handle_realtime_ordered_map const *: ccc_hrm_capacity)( \
814 (container_ptr))
815
816#define ccc_impl_is_empty(container_ptr) \
817 _Generic((container_ptr), \
818 ccc_buffer *: ccc_buf_is_empty, \
819 ccc_flat_hash_map *: ccc_fhm_is_empty, \
820 ccc_handle_hash_map *: ccc_hhm_is_empty, \
821 ccc_ordered_map *: ccc_om_is_empty, \
822 ccc_handle_ordered_map *: ccc_hom_is_empty, \
823 ccc_flat_priority_queue *: ccc_fpq_is_empty, \
824 ccc_flat_double_ended_queue *: ccc_fdeq_is_empty, \
825 ccc_ordered_multimap *: ccc_omm_is_empty, \
826 ccc_priority_queue *: ccc_pq_is_empty, \
827 ccc_singly_linked_list *: ccc_sll_is_empty, \
828 ccc_doubly_linked_list *: ccc_dll_is_empty, \
829 ccc_realtime_ordered_map *: ccc_rom_is_empty, \
830 ccc_handle_realtime_ordered_map *: ccc_hrm_is_empty, \
831 ccc_buffer const *: ccc_buf_is_empty, \
832 ccc_flat_hash_map const *: ccc_fhm_is_empty, \
833 ccc_handle_hash_map const *: ccc_hhm_is_empty, \
834 ccc_ordered_map const *: ccc_om_is_empty, \
835 ccc_handle_ordered_map const *: ccc_hom_is_empty, \
836 ccc_flat_priority_queue const *: ccc_fpq_is_empty, \
837 ccc_flat_double_ended_queue const *: ccc_fdeq_is_empty, \
838 ccc_ordered_multimap const *: ccc_omm_is_empty, \
839 ccc_priority_queue const *: ccc_pq_is_empty, \
840 ccc_singly_linked_list const *: ccc_sll_is_empty, \
841 ccc_doubly_linked_list const *: ccc_dll_is_empty, \
842 ccc_handle_realtime_ordered_map const *: ccc_hrm_is_empty, \
843 ccc_realtime_ordered_map const *: ccc_rom_is_empty)((container_ptr))
844
845#define ccc_impl_validate(container_ptr) \
846 _Generic((container_ptr), \
847 ccc_flat_hash_map *: ccc_fhm_validate, \
848 ccc_handle_hash_map *: ccc_hhm_validate, \
849 ccc_ordered_map *: ccc_om_validate, \
850 ccc_handle_ordered_map *: ccc_hom_validate, \
851 ccc_flat_priority_queue *: ccc_fpq_validate, \
852 ccc_flat_double_ended_queue *: ccc_fdeq_validate, \
853 ccc_ordered_multimap *: ccc_omm_validate, \
854 ccc_priority_queue *: ccc_pq_validate, \
855 ccc_singly_linked_list *: ccc_sll_validate, \
856 ccc_doubly_linked_list *: ccc_dll_validate, \
857 ccc_realtime_ordered_map *: ccc_rom_validate, \
858 ccc_handle_realtime_ordered_map *: ccc_hrm_validate, \
859 ccc_flat_hash_map const *: ccc_fhm_validate, \
860 ccc_handle_hash_map const *: ccc_hhm_validate, \
861 ccc_ordered_map const *: ccc_om_validate, \
862 ccc_handle_ordered_map const *: ccc_hom_validate, \
863 ccc_flat_priority_queue const *: ccc_fpq_validate, \
864 ccc_flat_double_ended_queue const *: ccc_fdeq_validate, \
865 ccc_ordered_multimap const *: ccc_omm_validate, \
866 ccc_priority_queue const *: ccc_pq_validate, \
867 ccc_singly_linked_list const *: ccc_sll_validate, \
868 ccc_doubly_linked_list const *: ccc_dll_validate, \
869 ccc_handle_realtime_ordered_map const *: ccc_hrm_validate, \
870 ccc_realtime_ordered_map const *: ccc_rom_validate)((container_ptr))
871
872#endif /* CCC_IMPL_TRAITS_H */