Containers
This library provides various containers. Each container has utility functions to manipulate the data it holds. This is an abstraction as to not have to manually manage and reallocate memory.
containers.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2022 Bailey Thompson
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20  * SOFTWARE.
21  */
22 
23 /*
24  * The Containers library is hosted at: github.com/bkthomps/Containers
25  * The author is: Bailey Thompson
26  * This local version is: v1.2.1
27  */
28 
29 
30 #ifndef BKTHOMPS_CONTAINERS_BK_DEFINES_H
31 #define BKTHOMPS_CONTAINERS_BK_DEFINES_H
32 
33 #include <stdlib.h>
34 
35 /*
36  * Cannot use <errno.h> because the C89 standard does not guarantee all
37  * of these. These are the same values as the regular linux error codes.
38  */
39 #define BK_OK 0
40 #define BK_ENOMEM 12
41 #define BK_EINVAL 22
42 #define BK_ERANGE 34
43 
44 /* Cannot use <stdbool.h> because it is C99 not C89. */
45 #define BK_FALSE 0
46 #define BK_TRUE (!BK_FALSE)
47 
48 typedef int bk_err;
49 typedef int bk_bool;
50 
51 #endif /* BKTHOMPS_CONTAINERS_BK_DEFINES_H */
52 
53 
54 #ifndef BKTHOMPS_CONTAINERS_ARRAY_H
55 #define BKTHOMPS_CONTAINERS_ARRAY_H
56 
60 typedef char *array;
61 
62 /* Starting */
63 array array_init(size_t element_count, size_t data_size);
64 
65 /* Utility */
66 size_t array_size(array me);
67 void array_copy_to_array(void *arr, array me);
68 void *array_get_data(array me);
69 bk_err array_add_all(array me, void *arr, size_t size);
70 
71 /* Accessing */
72 bk_err array_set(array me, size_t index, void *data);
73 bk_err array_get(void *data, array me, size_t index);
74 
75 /* Ending */
77 
78 #endif /* BKTHOMPS_CONTAINERS_ARRAY_H */
79 
80 
81 #ifndef BKTHOMPS_CONTAINERS_DEQUE_H
82 #define BKTHOMPS_CONTAINERS_DEQUE_H
83 
87 typedef struct internal_deque *deque;
88 
89 /* Starting */
90 deque deque_init(size_t data_size);
91 
92 /* Utility */
93 size_t deque_size(deque me);
96 void deque_copy_to_array(void *arr, deque me);
97 bk_err deque_add_all(deque me, void *arr, size_t size);
98 
99 /* Adding */
100 bk_err deque_push_front(deque me, void *data);
101 bk_err deque_push_back(deque me, void *data);
102 
103 /* Removing */
104 bk_err deque_pop_front(void *data, deque me);
105 bk_err deque_pop_back(void *data, deque me);
106 
107 /* Setting */
108 bk_err deque_set_first(deque me, void *data);
109 bk_err deque_set_at(deque me, size_t index, void *data);
110 bk_err deque_set_last(deque me, void *data);
111 
112 /* Getting */
113 bk_err deque_get_first(void *data, deque me);
114 bk_err deque_get_at(void *data, deque me, size_t index);
115 bk_err deque_get_last(void *data, deque me);
116 
117 /* Ending */
120 
121 #endif /* BKTHOMPS_CONTAINERS_DEQUE_H */
122 
123 
124 #ifndef BKTHOMPS_CONTAINERS_FORWARD_LIST_H
125 #define BKTHOMPS_CONTAINERS_FORWARD_LIST_H
126 
130 typedef struct internal_forward_list *forward_list;
131 
132 /* Starting */
133 forward_list forward_list_init(size_t data_size);
134 
135 /* Utility */
138 void forward_list_copy_to_array(void *arr, forward_list me);
139 bk_err forward_list_add_all(forward_list me, void *arr, size_t size);
140 
141 /* Adding */
143 bk_err forward_list_add_at(forward_list me, size_t index, void *data);
145 
146 /* Removing */
148 bk_err forward_list_remove_at(forward_list me, size_t index);
150 
151 /* Setting */
153 bk_err forward_list_set_at(forward_list me, size_t index, void *data);
155 
156 /* Getting */
158 bk_err forward_list_get_at(void *data, forward_list me, size_t index);
160 
161 /* Ending */
164 
165 #endif /* BKTHOMPS_CONTAINERS_FORWARD_LIST_H */
166 
167 
168 #ifndef BKTHOMPS_CONTAINERS_LIST_H
169 #define BKTHOMPS_CONTAINERS_LIST_H
170 
174 typedef struct internal_list *list;
175 
176 /* Starting */
177 list list_init(size_t data_size);
178 
179 /* Utility */
180 size_t list_size(list me);
182 void list_copy_to_array(void *arr, list me);
183 bk_err list_add_all(list me, void *arr, size_t size);
184 
185 /* Adding */
186 bk_err list_add_first(list me, void *data);
187 bk_err list_add_at(list me, size_t index, void *data);
188 bk_err list_add_last(list me, void *data);
189 
190 /* Removing */
192 bk_err list_remove_at(list me, size_t index);
194 
195 /* Setting */
196 bk_err list_set_first(list me, void *data);
197 bk_err list_set_at(list me, size_t index, void *data);
198 bk_err list_set_last(list me, void *data);
199 
200 /* Getting */
201 bk_err list_get_first(void *data, list me);
202 bk_err list_get_at(void *data, list me, size_t index);
203 bk_err list_get_last(void *data, list me);
204 
205 /* Ending */
206 void list_clear(list me);
208 
209 #endif /* BKTHOMPS_CONTAINERS_LIST_H */
210 
211 
212 #ifndef BKTHOMPS_CONTAINERS_MAP_H
213 #define BKTHOMPS_CONTAINERS_MAP_H
214 
219 typedef struct internal_map *map;
220 
221 /* Starting */
222 map map_init(size_t key_size, size_t value_size,
223  int (*comparator)(const void *const one, const void *const two));
224 
225 /* Capacity */
226 size_t map_size(map me);
228 
229 /* Accessing */
230 bk_err map_put(map me, void *key, void *value);
231 bk_bool map_get(void *value, map me, void *key);
232 bk_bool map_contains(map me, void *key);
233 bk_bool map_remove(map me, void *key);
234 
235 /* Retrieval */
236 void *map_first(map me);
237 void *map_last(map me);
238 void *map_lower(map me, void *key);
239 void *map_higher(map me, void *key);
240 void *map_floor(map me, void *key);
241 void *map_ceiling(map me, void *key);
242 
243 /* Ending */
244 void map_clear(map me);
245 map map_destroy(map me);
246 
247 #endif /* BKTHOMPS_CONTAINERS_MAP_H */
248 
249 
250 #ifndef BKTHOMPS_CONTAINERS_MULTIMAP_H
251 #define BKTHOMPS_CONTAINERS_MULTIMAP_H
252 
257 typedef struct internal_multimap *multimap;
258 
259 /* Starting */
260 multimap multimap_init(size_t key_size, size_t value_size,
261  int (*key_comparator)(const void *const one,
262  const void *const two),
263  int (*value_comparator)(const void *const one,
264  const void *const two));
265 
266 /* Capacity */
267 size_t multimap_size(multimap me);
268 bk_bool multimap_is_empty(multimap me);
269 
270 /* Accessing */
271 bk_err multimap_put(multimap me, void *key, void *value);
272 void multimap_get_start(multimap me, void *key);
273 bk_bool multimap_get_next(void *value, multimap me);
274 size_t multimap_count(multimap me, void *key);
275 bk_bool multimap_contains(multimap me, void *key);
276 bk_bool multimap_remove(multimap me, void *key, void *value);
277 bk_bool multimap_remove_all(multimap me, void *key);
278 
279 /* Retrieval */
280 void *multimap_first(multimap me);
281 void *multimap_last(multimap me);
282 void *multimap_lower(multimap me, void *key);
283 void *multimap_higher(multimap me, void *key);
284 void *multimap_floor(multimap me, void *key);
285 void *multimap_ceiling(multimap me, void *key);
286 
287 /* Ending */
288 void multimap_clear(multimap me);
289 multimap multimap_destroy(multimap me);
290 
291 #endif /* BKTHOMPS_CONTAINERS_MULTIMAP_H */
292 
293 
294 #ifndef BKTHOMPS_CONTAINERS_MULTISET_H
295 #define BKTHOMPS_CONTAINERS_MULTISET_H
296 
301 typedef struct internal_multiset *multiset;
302 
303 /* Starting */
304 multiset multiset_init(size_t key_size,
305  int (*comparator)(const void *const one,
306  const void *const two));
307 
308 /* Capacity */
309 size_t multiset_size(multiset me);
310 bk_bool multiset_is_empty(multiset me);
311 
312 /* Accessing */
313 bk_err multiset_put(multiset me, void *key);
314 size_t multiset_count(multiset me, void *key);
315 bk_bool multiset_contains(multiset me, void *key);
316 bk_bool multiset_remove(multiset me, void *key);
317 bk_bool multiset_remove_all(multiset me, void *key);
318 
319 /* Retrieval */
320 void *multiset_first(multiset me);
321 void *multiset_last(multiset me);
322 void *multiset_lower(multiset me, void *key);
323 void *multiset_higher(multiset me, void *key);
324 void *multiset_floor(multiset me, void *key);
325 void *multiset_ceiling(multiset me, void *key);
326 
327 /* Ending */
328 void multiset_clear(multiset me);
329 multiset multiset_destroy(multiset me);
330 
331 #endif /* BKTHOMPS_CONTAINERS_MULTISET_H */
332 
333 
334 #ifndef BKTHOMPS_CONTAINERS_PRIORITY_QUEUE_H
335 #define BKTHOMPS_CONTAINERS_PRIORITY_QUEUE_H
336 
341 typedef struct internal_priority_queue *priority_queue;
342 
343 /* Starting */
344 priority_queue priority_queue_init(size_t data_size,
345  int (*comparator)(const void *const one,
346  const void *const two));
347 
348 /* Utility */
349 size_t priority_queue_size(priority_queue me);
350 bk_bool priority_queue_is_empty(priority_queue me);
351 
352 /* Adding */
353 bk_err priority_queue_push(priority_queue me, void *data);
354 
355 /* Removing */
356 bk_bool priority_queue_pop(void *data, priority_queue me);
357 
358 /* Getting */
359 bk_bool priority_queue_front(void *data, priority_queue me);
360 
361 /* Ending */
362 bk_err priority_queue_clear(priority_queue me);
363 priority_queue priority_queue_destroy(priority_queue me);
364 
365 #endif /* BKTHOMPS_CONTAINERS_PRIORITY_QUEUE_H */
366 
367 
368 #ifndef BKTHOMPS_CONTAINERS_QUEUE_H
369 #define BKTHOMPS_CONTAINERS_QUEUE_H
370 
375 typedef struct internal_deque *queue;
376 
377 /* Starting */
378 queue queue_init(size_t data_size);
379 
380 /* Utility */
381 size_t queue_size(queue me);
382 bk_bool queue_is_empty(queue me);
383 bk_err queue_trim(queue me);
384 void queue_copy_to_array(void *arr, queue me);
385 
386 /* Adding */
387 bk_err queue_push(queue me, void *data);
388 
389 /* Removing */
390 bk_bool queue_pop(void *data, queue me);
391 
392 /* Getting */
393 bk_bool queue_front(void *data, queue me);
394 bk_bool queue_back(void *data, queue me);
395 
396 /* Ending */
397 bk_err queue_clear(queue me);
398 queue queue_destroy(queue me);
399 
400 #endif /* BKTHOMPS_CONTAINERS_QUEUE_H */
401 
402 
403 #ifndef BKTHOMPS_CONTAINERS_SET_H
404 #define BKTHOMPS_CONTAINERS_SET_H
405 
409 typedef struct internal_set *set;
410 
411 /* Starting */
412 set set_init(size_t key_size,
413  int (*comparator)(const void *const one, const void *const two));
414 
415 /* Capacity */
416 size_t set_size(set me);
417 bk_bool set_is_empty(set me);
418 
419 /* Accessing */
420 bk_err set_put(set me, void *key);
421 bk_bool set_contains(set me, void *key);
422 bk_bool set_remove(set me, void *key);
423 
424 /* Retrieval */
425 void *set_first(set me);
426 void *set_last(set me);
427 void *set_lower(set me, void *key);
428 void *set_higher(set me, void *key);
429 void *set_floor(set me, void *key);
430 void *set_ceiling(set me, void *key);
431 
432 /* Ending */
433 void set_clear(set me);
434 set set_destroy(set me);
435 
436 #endif /* BKTHOMPS_CONTAINERS_SET_H */
437 
438 
439 #ifndef BKTHOMPS_CONTAINERS_STACK_H
440 #define BKTHOMPS_CONTAINERS_STACK_H
441 
446 typedef struct internal_deque *stack;
447 
448 /* Starting */
449 stack stack_init(size_t data_size);
450 
451 /* Utility */
452 size_t stack_size(stack me);
453 bk_bool stack_is_empty(stack me);
454 bk_err stack_trim(stack me);
455 void stack_copy_to_array(void *arr, stack me);
456 
457 /* Adding */
458 bk_err stack_push(stack me, void *data);
459 
460 /* Removing */
461 bk_bool stack_pop(void *data, stack me);
462 
463 /* Getting */
464 bk_bool stack_top(void *data, stack me);
465 
466 /* Ending */
467 bk_err stack_clear(stack me);
468 stack stack_destroy(stack me);
469 
470 #endif /* BKTHOMPS_CONTAINERS_STACK_H */
471 
472 
473 #ifndef BKTHOMPS_CONTAINERS_UNORDERED_MAP_H
474 #define BKTHOMPS_CONTAINERS_UNORDERED_MAP_H
475 
480 typedef struct internal_unordered_map *unordered_map;
481 
482 /* Starting */
483 unordered_map unordered_map_init(size_t key_size,
484  size_t value_size,
485  unsigned long (*hash)(const void *const key),
486  int (*comparator)(const void *const one,
487  const void *const two));
488 
489 /* Utility */
490 bk_err unordered_map_rehash(unordered_map me);
491 size_t unordered_map_size(unordered_map me);
492 bk_bool unordered_map_is_empty(unordered_map me);
493 
494 /* Accessing */
495 bk_err unordered_map_put(unordered_map me, void *key, void *value);
496 bk_bool unordered_map_get(void *value, unordered_map me, void *key);
497 bk_bool unordered_map_contains(unordered_map me, void *key);
498 bk_bool unordered_map_remove(unordered_map me, void *key);
499 
500 /* Ending */
501 bk_err unordered_map_clear(unordered_map me);
502 unordered_map unordered_map_destroy(unordered_map me);
503 
504 #endif /* BKTHOMPS_CONTAINERS_UNORDERED_MAP_H */
505 
506 
507 #ifndef BKTHOMPS_CONTAINERS_UNORDERED_MULTIMAP_H
508 #define BKTHOMPS_CONTAINERS_UNORDERED_MULTIMAP_H
509 
514 typedef struct internal_unordered_multimap *unordered_multimap;
515 
516 /* Starting */
517 unordered_multimap
518 unordered_multimap_init(size_t key_size,
519  size_t value_size,
520  unsigned long (*hash)(const void *const key),
521  int (*key_comparator)(const void *const one,
522  const void *const two),
523  int (*value_comparator)(const void *const one,
524  const void *const two));
525 
526 /* Utility */
527 bk_err unordered_multimap_rehash(unordered_multimap me);
528 size_t unordered_multimap_size(unordered_multimap me);
529 bk_bool unordered_multimap_is_empty(unordered_multimap me);
530 
531 /* Accessing */
532 bk_err unordered_multimap_put(unordered_multimap me, void *key, void *value);
533 void unordered_multimap_get_start(unordered_multimap me, void *key);
534 bk_bool unordered_multimap_get_next(void *value, unordered_multimap me);
535 size_t unordered_multimap_count(unordered_multimap me, void *key);
536 bk_bool unordered_multimap_contains(unordered_multimap me, void *key);
537 bk_bool unordered_multimap_remove(unordered_multimap me,
538  void *key, void *value);
539 bk_bool unordered_multimap_remove_all(unordered_multimap me, void *key);
540 
541 /* Ending */
542 bk_err unordered_multimap_clear(unordered_multimap me);
543 unordered_multimap unordered_multimap_destroy(unordered_multimap me);
544 
545 #endif /* BKTHOMPS_CONTAINERS_UNORDERED_MULTIMAP_H */
546 
547 
548 #ifndef BKTHOMPS_CONTAINERS_UNORDERED_MULTISET_H
549 #define BKTHOMPS_CONTAINERS_UNORDERED_MULTISET_H
550 
555 typedef struct internal_unordered_multiset *unordered_multiset;
556 
557 /* Starting */
558 unordered_multiset
559 unordered_multiset_init(size_t key_size,
560  unsigned long (*hash)(const void *const key),
561  int (*comparator)(const void *const one,
562  const void *const two));
563 
564 /* Utility */
565 bk_err unordered_multiset_rehash(unordered_multiset me);
566 size_t unordered_multiset_size(unordered_multiset me);
567 bk_bool unordered_multiset_is_empty(unordered_multiset me);
568 
569 /* Accessing */
570 bk_err unordered_multiset_put(unordered_multiset me, void *key);
571 size_t unordered_multiset_count(unordered_multiset me, void *key);
572 bk_bool unordered_multiset_contains(unordered_multiset me, void *key);
573 bk_bool unordered_multiset_remove(unordered_multiset me, void *key);
574 bk_bool unordered_multiset_remove_all(unordered_multiset me, void *key);
575 
576 /* Ending */
577 bk_err unordered_multiset_clear(unordered_multiset me);
578 unordered_multiset unordered_multiset_destroy(unordered_multiset me);
579 
580 #endif /* BKTHOMPS_CONTAINERS_UNORDERED_MULTISET_H */
581 
582 
583 #ifndef BKTHOMPS_CONTAINERS_UNORDERED_SET_H
584 #define BKTHOMPS_CONTAINERS_UNORDERED_SET_H
585 
590 typedef struct internal_unordered_set *unordered_set;
591 
592 /* Starting */
593 unordered_set unordered_set_init(size_t key_size,
594  unsigned long (*hash)(const void *const key),
595  int (*comparator)(const void *const one,
596  const void *const two));
597 
598 /* Utility */
599 bk_err unordered_set_rehash(unordered_set me);
600 size_t unordered_set_size(unordered_set me);
601 bk_bool unordered_set_is_empty(unordered_set me);
602 
603 /* Accessing */
604 bk_err unordered_set_put(unordered_set me, void *key);
605 bk_bool unordered_set_contains(unordered_set me, void *key);
606 bk_bool unordered_set_remove(unordered_set me, void *key);
607 
608 /* Ending */
609 bk_err unordered_set_clear(unordered_set me);
610 unordered_set unordered_set_destroy(unordered_set me);
611 
612 #endif /* BKTHOMPS_CONTAINERS_UNORDERED_SET_H */
613 
614 
615 #ifndef BKTHOMPS_CONTAINERS_VECTOR_H
616 #define BKTHOMPS_CONTAINERS_VECTOR_H
617 
621 typedef struct internal_vector *vector;
622 
623 /* Starting */
624 vector vector_init(size_t data_size);
625 
626 /* Utility */
627 size_t vector_size(vector me);
628 size_t vector_capacity(vector me);
629 bk_bool vector_is_empty(vector me);
630 bk_err vector_reserve(vector me, size_t size);
631 bk_err vector_trim(vector me);
632 void vector_copy_to_array(void *arr, vector me);
633 void *vector_get_data(vector me);
634 bk_err vector_add_all(vector me, void *arr, size_t size);
635 
636 /* Adding */
637 bk_err vector_add_first(vector me, void *data);
638 bk_err vector_add_at(vector me, size_t index, void *data);
639 bk_err vector_add_last(vector me, void *data);
640 
641 /* Removing */
642 bk_err vector_remove_first(vector me);
643 bk_err vector_remove_at(vector me, size_t index);
644 bk_err vector_remove_last(vector me);
645 
646 /* Setting */
647 bk_err vector_set_first(vector me, void *data);
648 bk_err vector_set_at(vector me, size_t index, void *data);
649 bk_err vector_set_last(vector me, void *data);
650 
651 /* Getting */
652 bk_err vector_get_first(void *data, vector me);
653 bk_err vector_get_at(void *data, vector me, size_t index);
654 bk_err vector_get_last(void *data, vector me);
655 
656 /* Ending */
657 bk_err vector_clear(vector me);
658 vector vector_destroy(vector me);
659 
660 #endif /* BKTHOMPS_CONTAINERS_VECTOR_H */
bk_err vector_clear(vector me)
Definition: vector.c:484
void map_clear(map me)
Definition: map.c:880
bk_err array_get(void *data, array me, size_t index)
Definition: array.c:191
void * multimap_higher(multimap me, void *key)
Definition: multimap.c:996
bk_err vector_reserve(vector me, size_t size)
Definition: vector.c:136
bk_err unordered_map_put(unordered_map me, void *key, void *value)
Definition: unordered_map.c:269
bk_bool multiset_is_empty(multiset me)
Definition: multiset.c:97
size_t stack_size(stack me)
Definition: stack.c:48
size_t deque_size(deque me)
Definition: deque.c:101
bk_bool multiset_remove_all(multiset me, void *key)
Definition: multiset.c:753
void vector_copy_to_array(void *arr, vector me)
Definition: vector.c:168
list list_destroy(list me)
Definition: list.c:522
bk_err list_get_first(void *data, list me)
Definition: list.c:445
void * array_get_data(array me)
Definition: array.c:113
bk_bool unordered_multiset_is_empty(unordered_multiset me)
Definition: unordered_multiset.c:184
bk_err deque_add_all(deque me, void *arr, size_t size)
Definition: deque.c:211
bk_err list_add_at(list me, size_t index, void *data)
Definition: list.c:243
bk_bool queue_is_empty(queue me)
Definition: queue.c:60
bk_err list_add_first(list me, void *data)
Definition: list.c:223
bk_bool map_remove(map me, void *key)
Definition: map.c:714
void * multimap_ceiling(multimap me, void *key)
Definition: multimap.c:1048
bk_bool multimap_contains(multimap me, void *key)
Definition: multimap.c:554
bk_err array_set(array me, size_t index, void *data)
Definition: array.c:163
bk_err deque_clear(deque me)
Definition: deque.c:619
list list_init(size_t data_size)
Definition: list.c:47
bk_err deque_set_first(deque me, void *data)
Definition: deque.c:498
size_t list_size(list me)
Definition: list.c:74
bk_err vector_get_last(void *data, vector me)
Definition: vector.c:471
size_t unordered_set_size(unordered_set me)
Definition: unordered_set.c:166
bk_err set_put(set me, void *key)
Definition: set.c:309
bk_err forward_list_get_last(void *data, forward_list me)
Definition: forward_list.c:466
bk_err forward_list_set_at(forward_list me, size_t index, void *data)
Definition: forward_list.c:376
size_t set_size(set me)
Definition: set.c:79
void deque_copy_to_array(void *arr, deque me)
Definition: deque.c:167
bk_bool stack_top(void *data, stack me)
Definition: stack.c:141
bk_err forward_list_remove_at(forward_list me, size_t index)
Definition: forward_list.c:302
size_t unordered_multimap_size(unordered_multimap me)
Definition: unordered_multimap.c:195
size_t unordered_multiset_count(unordered_multiset me, void *key)
Definition: unordered_multiset.c:327
bk_err deque_get_at(void *data, deque me, size_t index)
Definition: deque.c:580
size_t queue_size(queue me)
Definition: queue.c:47
bk_bool set_contains(set me, void *key)
Definition: set.c:404
bk_bool multiset_remove(multiset me, void *key)
Definition: multiset.c:723
bk_err deque_set_at(deque me, size_t index, void *data)
Definition: deque.c:517
bk_err unordered_multiset_clear(unordered_multiset me)
Definition: unordered_multiset.c:478
void * multiset_lower(multiset me, void *key)
Definition: multiset.c:823
bk_bool map_is_empty(map me)
Definition: map.c:98
unordered_map unordered_map_destroy(unordered_map me)
Definition: unordered_map.c:450
bk_err unordered_set_rehash(unordered_set me)
Definition: unordered_set.c:134
unordered_multiset unordered_multiset_destroy(unordered_multiset me)
Definition: unordered_multiset.c:511
multiset multiset_destroy(multiset me)
Definition: multiset.c:939
bk_err list_add_all(list me, void *arr, size_t size)
Definition: list.c:127
struct internal_unordered_map * unordered_map
Definition: containers.h:480
bk_bool unordered_map_get(void *value, unordered_map me, void *key)
Definition: unordered_map.c:328
bk_err vector_set_at(vector me, size_t index, void *data)
Definition: vector.c:390
struct internal_deque * queue
Definition: containers.h:375
bk_bool unordered_map_contains(unordered_map me, void *key)
Definition: unordered_map.c:355
bk_err unordered_multiset_rehash(unordered_multiset me)
Definition: unordered_multiset.c:140
char * array
Definition: containers.h:60
bk_bool unordered_multimap_get_next(void *value, unordered_multimap me)
Definition: unordered_multimap.c:368
void unordered_multimap_get_start(unordered_multimap me, void *key)
Definition: unordered_multimap.c:337
size_t unordered_multiset_size(unordered_multiset me)
Definition: unordered_multiset.c:172
bk_err forward_list_get_first(void *data, forward_list me)
Definition: forward_list.c:420
array array_init(size_t element_count, size_t data_size)
Definition: array.c:42
bk_err priority_queue_clear(priority_queue me)
Definition: priority_queue.c:232
bk_err list_set_first(list me, void *data)
Definition: list.c:383
bk_bool unordered_set_is_empty(unordered_set me)
Definition: unordered_set.c:178
size_t unordered_map_size(unordered_map me)
Definition: unordered_map.c:176
bk_err forward_list_get_at(void *data, forward_list me, size_t index)
Definition: forward_list.c:440
bk_err stack_clear(stack me)
Definition: stack.c:154
bk_err forward_list_remove_first(forward_list me)
Definition: forward_list.c:288
bk_bool unordered_set_remove(unordered_set me, void *key)
Definition: unordered_set.c:333
size_t multiset_size(multiset me)
Definition: multiset.c:85
void * map_ceiling(map me, void *key)
Definition: map.c:859
bk_bool priority_queue_is_empty(priority_queue me)
Definition: priority_queue.c:85
struct internal_vector * vector
Definition: containers.h:621
priority_queue priority_queue_destroy(priority_queue me)
Definition: priority_queue.c:246
bk_bool multimap_get_next(void *value, multimap me)
Definition: multimap.c:505
bk_err vector_trim(vector me)
Definition: vector.c:152
bk_bool priority_queue_front(void *data, priority_queue me)
Definition: priority_queue.c:219
bk_err unordered_set_clear(unordered_set me)
Definition: unordered_set.c:372
multimap multimap_destroy(multimap me)
Definition: multimap.c:1085
void * map_first(map me)
Definition: map.c:733
bk_err queue_trim(queue me)
Definition: queue.c:73
bk_err deque_trim(deque me)
Definition: deque.c:127
void * set_higher(set me, void *key)
Definition: set.c:770
void forward_list_clear(forward_list me)
Definition: forward_list.c:476
bk_err vector_remove_last(vector me)
Definition: vector.c:349
bk_bool multimap_remove(multimap me, void *key, void *value)
Definition: multimap.c:831
struct internal_map * map
Definition: containers.h:219
size_t map_size(map me)
Definition: map.c:86
void * multimap_lower(multimap me, void *key)
Definition: multimap.c:970
unordered_map unordered_map_init(size_t key_size, size_t value_size, unsigned long(*hash)(const void *const key), int(*comparator)(const void *const one, const void *const two))
bk_bool set_remove(set me, void *key)
Definition: set.c:677
stack stack_init(size_t data_size)
Definition: stack.c:36
array array_destroy(array me)
Definition: array.c:213
void * set_lower(set me, void *key)
Definition: set.c:744
bk_bool unordered_multimap_contains(unordered_multimap me, void *key)
Definition: unordered_multimap.c:432
bk_err vector_remove_first(vector me)
Definition: vector.c:315
bk_bool unordered_map_is_empty(unordered_map me)
Definition: unordered_map.c:188
struct internal_unordered_multiset * unordered_multiset
Definition: containers.h:555
unordered_set unordered_set_destroy(unordered_set me)
Definition: unordered_set.c:403
bk_err forward_list_set_first(forward_list me, void *data)
Definition: forward_list.c:357
bk_err queue_clear(queue me)
Definition: queue.c:170
bk_bool deque_is_empty(deque me)
Definition: deque.c:113
map map_destroy(map me)
Definition: map.c:896
bk_err forward_list_add_first(forward_list me, void *data)
Definition: forward_list.c:212
void set_clear(set me)
Definition: set.c:843
void * map_lower(map me, void *key)
Definition: map.c:781
void forward_list_copy_to_array(void *arr, forward_list me)
Definition: forward_list.c:101
void * map_higher(map me, void *key)
Definition: map.c:807
size_t multiset_count(multiset me, void *key)
Definition: multiset.c:425
unordered_multimap unordered_multimap_init(size_t key_size, size_t value_size, unsigned long(*hash)(const void *const key), int(*key_comparator)(const void *const one, const void *const two), int(*value_comparator)(const void *const one, const void *const two))
bk_bool queue_back(void *data, queue me)
Definition: queue.c:157
bk_err multiset_put(multiset me, void *key)
Definition: multiset.c:325
bk_err list_get_last(void *data, list me)
Definition: list.c:490
size_t unordered_multimap_count(unordered_multimap me, void *key)
Definition: unordered_multimap.c:405
void * multiset_last(multiset me)
Definition: multiset.c:799
struct internal_priority_queue * priority_queue
Definition: containers.h:341
bk_err unordered_map_clear(unordered_map me)
Definition: unordered_map.c:419
bk_err vector_add_all(vector me, void *arr, size_t size)
Definition: vector.c:207
bk_bool map_contains(map me, void *key)
Definition: map.c:441
bk_err deque_pop_front(void *data, deque me)
Definition: deque.c:443
void * multiset_first(multiset me)
Definition: multiset.c:775
bk_err forward_list_remove_last(forward_list me)
Definition: forward_list.c:339
stack stack_destroy(stack me)
Definition: stack.c:168
bk_err forward_list_add_last(forward_list me, void *data)
Definition: forward_list.c:275
bk_err vector_get_first(void *data, vector me)
Definition: vector.c:430
bk_bool unordered_multiset_remove(unordered_multiset me, void *key)
Definition: unordered_multiset.c:373
queue queue_destroy(queue me)
Definition: queue.c:184
size_t array_size(array me)
Definition: array.c:71
bk_bool unordered_set_contains(unordered_set me, void *key)
Definition: unordered_set.c:308
struct internal_list * list
Definition: containers.h:174
bk_bool multimap_is_empty(multimap me)
Definition: multimap.c:115
struct internal_deque * stack
Definition: containers.h:446
bk_err unordered_multiset_put(unordered_multiset me, void *key)
Definition: unordered_multiset.c:263
bk_bool map_get(void *value, map me, void *key)
Definition: map.c:419
bk_err queue_push(queue me, void *data)
Definition: queue.c:106
bk_err list_remove_last(list me)
Definition: list.c:365
bk_bool multiset_contains(multiset me, void *key)
Definition: multiset.c:448
bk_bool queue_front(void *data, queue me)
Definition: queue.c:140
bk_err vector_remove_at(vector me, size_t index)
Definition: vector.c:329
priority_queue priority_queue_init(size_t data_size, int(*comparator)(const void *const one, const void *const two))
void * multiset_floor(multiset me, void *key)
Definition: multiset.c:875
bk_err list_remove_at(list me, size_t index)
Definition: list.c:324
int bk_bool
Definition: containers.h:49
bk_bool multimap_remove_all(multimap me, void *key)
Definition: multimap.c:903
void * vector_get_data(vector me)
Definition: vector.c:189
bk_err stack_trim(stack me)
Definition: stack.c:73
bk_err list_get_at(void *data, list me, size_t index)
Definition: list.c:465
bk_err deque_push_back(deque me, void *data)
Definition: deque.c:372
void * multimap_floor(multimap me, void *key)
Definition: multimap.c:1022
bk_err forward_list_add_all(forward_list me, void *arr, size_t size)
Definition: forward_list.c:126
unordered_multimap unordered_multimap_destroy(unordered_multimap me)
Definition: unordered_multimap.c:587
size_t vector_capacity(vector me)
Definition: vector.c:89
multiset multiset_init(size_t key_size, int(*comparator)(const void *const one, const void *const two))
bk_err priority_queue_push(priority_queue me, void *data)
Definition: priority_queue.c:104
map map_init(size_t key_size, size_t value_size, int(*comparator)(const void *const one, const void *const two))
bk_err deque_pop_back(void *data, deque me)
Definition: deque.c:471
void * map_floor(map me, void *key)
Definition: map.c:833
bk_bool queue_pop(void *data, queue me)
Definition: queue.c:123
struct internal_deque * deque
Definition: containers.h:87
bk_bool unordered_multimap_remove(unordered_multimap me, void *key, void *value)
Definition: unordered_multimap.c:460
vector vector_init(size_t data_size)
Definition: vector.c:45
void multiset_clear(multiset me)
Definition: multiset.c:922
forward_list forward_list_init(size_t data_size)
Definition: forward_list.c:46
bk_err vector_add_first(vector me, void *data)
Definition: vector.c:238
bk_bool unordered_multimap_is_empty(unordered_multimap me)
Definition: unordered_multimap.c:207
queue queue_init(size_t data_size)
Definition: queue.c:35
bk_err vector_get_at(void *data, vector me, size_t index)
Definition: vector.c:449
void array_copy_to_array(void *arr, array me)
Definition: array.c:89
void * multiset_ceiling(multiset me, void *key)
Definition: multiset.c:901
vector vector_destroy(vector me)
Definition: vector.c:499
bk_err list_set_at(list me, size_t index, void *data)
Definition: list.c:402
void * map_last(map me)
Definition: map.c:757
bk_bool unordered_map_remove(unordered_map me, void *key)
Definition: unordered_map.c:380
struct internal_unordered_multimap * unordered_multimap
Definition: containers.h:514
unordered_set unordered_set_init(size_t key_size, unsigned long(*hash)(const void *const key), int(*comparator)(const void *const one, const void *const two))
bk_bool stack_pop(void *data, stack me)
Definition: stack.c:124
bk_err unordered_multimap_put(unordered_multimap me, void *key, void *value)
Definition: unordered_multimap.c:288
void * set_ceiling(set me, void *key)
Definition: set.c:822
bk_bool vector_is_empty(vector me)
Definition: vector.c:101
bk_err deque_set_last(deque me, void *data)
Definition: deque.c:543
deque deque_destroy(deque me)
Definition: deque.c:656
size_t multimap_count(multimap me, void *key)
Definition: multimap.c:531
multimap multimap_init(size_t key_size, size_t value_size, int(*key_comparator)(const void *const one, const void *const two), int(*value_comparator)(const void *const one, const void *const two))
int bk_err
Definition: containers.h:48
bk_err stack_push(stack me, void *data)
Definition: stack.c:106
void * multimap_last(multimap me)
Definition: multimap.c:946
bk_err forward_list_add_at(forward_list me, size_t index, void *data)
Definition: forward_list.c:232
void queue_copy_to_array(void *arr, queue me)
Definition: queue.c:87
bk_err unordered_set_put(unordered_set me, void *key)
Definition: unordered_set.c:255
bk_err deque_push_front(deque me, void *data)
Definition: deque.c:293
bk_bool unordered_multimap_remove_all(unordered_multimap me, void *key)
Definition: unordered_multimap.c:510
bk_err deque_get_last(void *data, deque me)
Definition: deque.c:606
set set_init(size_t key_size, int(*comparator)(const void *const one, const void *const two))
bk_err vector_set_first(vector me, void *data)
Definition: vector.c:371
bk_bool forward_list_is_empty(forward_list me)
Definition: forward_list.c:85
set set_destroy(set me)
Definition: set.c:859
struct internal_unordered_set * unordered_set
Definition: containers.h:590
bk_bool unordered_multiset_contains(unordered_multiset me, void *key)
Definition: unordered_multiset.c:355
void * multiset_higher(multiset me, void *key)
Definition: multiset.c:849
bk_err vector_set_last(vector me, void *data)
Definition: vector.c:412
void multimap_get_start(multimap me, void *key)
Definition: multimap.c:481
struct internal_forward_list * forward_list
Definition: containers.h:130
bk_err array_add_all(array me, void *arr, size_t size)
Definition: array.c:136
bk_err list_remove_first(list me)
Definition: list.c:310
bk_err list_set_last(list me, void *data)
Definition: list.c:426
bk_err unordered_map_rehash(unordered_map me)
Definition: unordered_map.c:144
bk_err map_put(map me, void *key, void *value)
Definition: map.c:320
bk_err vector_add_last(vector me, void *data)
Definition: vector.c:302
bk_err list_add_last(list me, void *data)
Definition: list.c:297
bk_err forward_list_set_last(forward_list me, void *data)
Definition: forward_list.c:401
void list_copy_to_array(void *arr, list me)
Definition: list.c:102
deque deque_init(size_t data_size)
Definition: deque.c:51
bk_err deque_get_first(void *data, deque me)
Definition: deque.c:561
forward_list forward_list_destroy(forward_list me)
Definition: forward_list.c:498
bk_err unordered_multimap_rehash(unordered_multimap me)
Definition: unordered_multimap.c:163
void list_clear(list me)
Definition: list.c:500
void stack_copy_to_array(void *arr, stack me)
Definition: stack.c:87
size_t forward_list_size(forward_list me)
Definition: forward_list.c:73
unordered_multiset unordered_multiset_init(size_t key_size, unsigned long(*hash)(const void *const key), int(*comparator)(const void *const one, const void *const two))
bk_bool set_is_empty(set me)
Definition: set.c:91
bk_bool list_is_empty(list me)
Definition: list.c:86
bk_bool unordered_multiset_remove_all(unordered_multiset me, void *key)
Definition: unordered_multiset.c:433
bk_err multimap_put(multimap me, void *key, void *value)
Definition: multimap.c:367
bk_err unordered_multimap_clear(unordered_multimap me)
Definition: unordered_multimap.c:555
bk_bool stack_is_empty(stack me)
Definition: stack.c:60
size_t vector_size(vector me)
Definition: vector.c:77
void * set_floor(set me, void *key)
Definition: set.c:796
void multimap_clear(multimap me)
Definition: multimap.c:1069
struct internal_multiset * multiset
Definition: containers.h:301
size_t multimap_size(multimap me)
Definition: multimap.c:103
bk_err vector_add_at(vector me, size_t index, void *data)
Definition: vector.c:259
void * set_first(set me)
Definition: set.c:696
void * set_last(set me)
Definition: set.c:720
void * multimap_first(multimap me)
Definition: multimap.c:922
bk_bool priority_queue_pop(void *data, priority_queue me)
Definition: priority_queue.c:152
size_t priority_queue_size(priority_queue me)
Definition: priority_queue.c:73
struct internal_multimap * multimap
Definition: containers.h:257