Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | ||
3 | * | ||
4 | * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * 1. Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * | ||
12 | * 2. Redistributions in binary form must reproduce the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer in the | ||
14 | * documentation and/or other materials provided with the distribution. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | ||
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
26 | * POSSIBILITY OF SUCH DAMAGE. | ||
27 | */ | ||
28 | |||
29 | #include "cx/map.h" | ||
30 | #include <string.h> | ||
31 | |||
32 | // <editor-fold desc="empty map implementation"> | ||
33 | |||
34 | 2 | static void cx_empty_map_noop(cx_attr_unused CxMap *map) { | |
35 | // this is a noop, but MUST be implemented | ||
36 | 2 | } | |
37 | |||
38 | 1 | static void *cx_empty_map_get( | |
39 | cx_attr_unused const CxMap *map, | ||
40 | cx_attr_unused CxHashKey key | ||
41 | ) { | ||
42 | 1 | return NULL; | |
43 | } | ||
44 | |||
45 | 12 | static bool cx_empty_map_iter_valid(cx_attr_unused const void *iter) { | |
46 | 12 | return false; | |
47 | } | ||
48 | |||
49 | 6 | static CxMapIterator cx_empty_map_iterator( | |
50 | const struct cx_map_s *map, | ||
51 | cx_attr_unused enum cx_map_iterator_type type | ||
52 | ) { | ||
53 | 6 | CxMapIterator iter = {0}; | |
54 | 6 | iter.map.c = map; | |
55 | 6 | iter.base.valid = cx_empty_map_iter_valid; | |
56 | 6 | return iter; | |
57 | } | ||
58 | |||
59 | static struct cx_map_class_s cx_empty_map_class = { | ||
60 | cx_empty_map_noop, | ||
61 | cx_empty_map_noop, | ||
62 | NULL, | ||
63 | cx_empty_map_get, | ||
64 | NULL, | ||
65 | cx_empty_map_iterator | ||
66 | }; | ||
67 | |||
68 | CxMap cx_empty_map = { | ||
69 | { | ||
70 | NULL, | ||
71 | NULL, | ||
72 | 0, | ||
73 | 0, | ||
74 | NULL, | ||
75 | NULL, | ||
76 | NULL, | ||
77 | false, | ||
78 | true | ||
79 | }, | ||
80 | &cx_empty_map_class | ||
81 | }; | ||
82 | |||
83 | CxMap *const cxEmptyMap = &cx_empty_map; | ||
84 | |||
85 | // </editor-fold> | ||
86 | |||
87 | 5 | CxMapIterator cxMapMutIteratorValues(CxMap *map) { | |
88 | 5 | CxMapIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_VALUES); | |
89 | 5 | it.base.mutating = true; | |
90 | 5 | return it; | |
91 | } | ||
92 | |||
93 | 5 | CxMapIterator cxMapMutIteratorKeys(CxMap *map) { | |
94 | 5 | CxMapIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_KEYS); | |
95 | 5 | it.base.mutating = true; | |
96 | 5 | return it; | |
97 | } | ||
98 | |||
99 | 2 | CxMapIterator cxMapMutIterator(CxMap *map) { | |
100 | 2 | CxMapIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_PAIRS); | |
101 | 2 | it.base.mutating = true; | |
102 | 2 | return it; | |
103 | } | ||
104 | |||
105 | 17 | void cxMapFree(CxMap *map) { | |
106 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
|
17 | if (map == NULL) return; |
107 | 17 | map->cl->deallocate(map); | |
108 | } | ||
109 |