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