Sun, 22 Dec 2024 22:10:04 +0100
don't trust that size_t always has word width
it should be the case on all platforms supported by UCX, but it's not strictly defined in POSIX that it must be the case
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved. |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | #include "cx/map.h" |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
30 | #include <string.h> |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | // <editor-fold desc="empty map implementation"> |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
34 | static void cx_empty_map_noop(cx_attr_unused CxMap *map) { |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | // this is a noop, but MUST be implemented |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | } |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | static void *cx_empty_map_get( |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
39 | cx_attr_unused const CxMap *map, |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
40 | cx_attr_unused CxHashKey key |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | ) { |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | return NULL; |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | } |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
45 | static bool cx_empty_map_iter_valid(cx_attr_unused const void *iter) { |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | return false; |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | } |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
49 | static CxIterator cx_empty_map_iterator( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
50 | const struct cx_map_s *map, |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
51 | cx_attr_unused enum cx_map_iterator_type type |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
52 | ) { |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | CxIterator iter = {0}; |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
54 | iter.src_handle.c = map; |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
55 | iter.base.valid = cx_empty_map_iter_valid; |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | return iter; |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | } |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | static struct cx_map_class_s cx_empty_map_class = { |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
60 | cx_empty_map_noop, |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
61 | cx_empty_map_noop, |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
62 | NULL, |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
63 | cx_empty_map_get, |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
64 | NULL, |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
65 | cx_empty_map_iterator |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | }; |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
68 | CxMap cx_empty_map = { |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
69 | { |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
70 | NULL, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
71 | NULL, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
72 | 0, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
73 | 0, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
74 | NULL, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
75 | NULL, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
76 | NULL, |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
77 | false |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
78 | }, |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
79 | &cx_empty_map_class |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | }; |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
82 | CxMap *const cxEmptyMap = &cx_empty_map; |
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
83 | |
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
84 | // </editor-fold> |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
85 | |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
86 | CxIterator cxMapMutIteratorValues(CxMap *map) { |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
87 | CxIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_VALUES); |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
88 | it.base.mutating = true; |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
89 | return it; |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
90 | } |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
91 | |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
92 | CxIterator cxMapMutIteratorKeys(CxMap *map) { |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
93 | CxIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_KEYS); |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
94 | it.base.mutating = true; |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
95 | return it; |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
96 | } |
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
97 | |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
98 | CxIterator cxMapMutIterator(CxMap *map) { |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
99 | CxIterator it = map->cl->iterator(map, CX_MAP_ITERATOR_PAIRS); |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
100 | it.base.mutating = true; |
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
709
diff
changeset
|
101 | return it; |
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
102 | } |