Fri, 23 May 2025 12:44:24 +0200
make test-compile depend on both static and shared
the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
d7f0b5a9a985
#189 declare basic map functions
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 |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
29 | * @file map.h |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
30 | * @brief Interface for map implementations. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
31 | * @author Mike Becker |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
32 | * @author Olaf Wintermann |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
33 | * @copyright 2-Clause BSD License |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | #ifndef UCX_MAP_H |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | #define UCX_MAP_H |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
|
681
502105523db7
fix common.h include problems - fixes #255
Mike Becker <universe@uap-core.de>
parents:
677
diff
changeset
|
39 | #include "common.h" |
|
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
669
diff
changeset
|
40 | #include "collection.h" |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
41 | #include "string.h" |
|
563
69a83fad8a35
improve hash key handling
Mike Becker <universe@uap-core.de>
parents:
558
diff
changeset
|
42 | #include "hash_key.h" |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | #ifdef __cplusplus |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | extern "C" { |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | #endif |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | /** Type for the UCX map. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | typedef struct cx_map_s CxMap; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | /** Type for a map entry. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | typedef struct cx_map_entry_s CxMapEntry; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
54 | /** Type for a map iterator. */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
55 | typedef struct cx_map_iterator_s CxMapIterator; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
56 | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | /** Type for map class definitions. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | typedef struct cx_map_class_s cx_map_class; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | /** Structure for the UCX map. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
61 | struct cx_map_s { |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
62 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
63 | * Base attributes. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
64 | */ |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
65 | CX_COLLECTION_BASE; |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | /** The map class definition. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | cx_map_class *cl; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
68 | }; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
70 | /** |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
71 | * A map entry. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
72 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
73 | struct cx_map_entry_s { |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
74 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
75 | * A pointer to the key. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
76 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
77 | const CxHashKey *key; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
78 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
79 | * A pointer to the value. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
80 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
81 | void *value; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
82 | }; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
83 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
84 | /** |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
85 | * The type of iterator for a map. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
86 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
87 | enum cx_map_iterator_type { |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
88 | /** |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
89 | * Iterates over key/value pairs. |
|
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 | CX_MAP_ITERATOR_PAIRS, |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
92 | /** |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
93 | * Iterates over keys only. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
94 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
95 | CX_MAP_ITERATOR_KEYS, |
|
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 | * Iterates over values only. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
98 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
99 | CX_MAP_ITERATOR_VALUES |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
100 | }; |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
101 | |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
102 | /** |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
103 | * Internal iterator struct - use CxMapIterator. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
104 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
105 | struct cx_map_iterator_s { |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
106 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
107 | * Inherited common data for all iterators. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
108 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
109 | CX_ITERATOR_BASE; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
110 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
111 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
112 | * Handle for the source map. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
113 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
114 | union { |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
115 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
116 | * Access for mutating iterators. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
117 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
118 | CxMap *m; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
119 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
120 | * Access for normal iterators. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
121 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
122 | const CxMap *c; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
123 | } map; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
124 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
125 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
126 | * Handle for the current element. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
127 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
128 | * @attention Depends on the map implementation, do not assume a type (better: do not use!). |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
129 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
130 | void *elem; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
131 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
132 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
133 | * Reserved memory for a map entry. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
134 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
135 | * If a map implementation uses an incompatible layout, the iterator needs something |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
136 | * to point to during iteration which @em is compatible. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
137 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
138 | CxMapEntry entry; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
139 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
140 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
141 | * Field for storing the current slot number. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
142 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
143 | * (Used internally) |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
144 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
145 | size_t slot; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
146 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
147 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
148 | * Counts the elements successfully. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
149 | * It usually does not denote a stable index within the map as it would be for arrays. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
150 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
151 | size_t index; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
152 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
153 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
154 | * The size of a value stored in this map. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
155 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
156 | size_t elem_size; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
157 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
158 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
159 | * May contain the total number of elements, if known. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
160 | * Set to @c SIZE_MAX when the total number is unknown during iteration. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
161 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
162 | * @remark The UCX implementations of #CxMap always know the number of elements they store. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
163 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
164 | size_t elem_count; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
165 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
166 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
167 | * The type of this iterator. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
168 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
169 | enum cx_map_iterator_type type; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
170 | }; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
171 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
172 | /** |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | * The class definition for arbitrary maps. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
175 | struct cx_map_class_s { |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
176 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | * Deallocates the entire memory. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | */ |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
992
diff
changeset
|
179 | void (*deallocate)(struct cx_map_s *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
181 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | * Removes all elements. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
184 | void (*clear)(struct cx_map_s *map); |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
185 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
186 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | * Add or overwrite an element. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | int (*put)( |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | CxMap *map, |
|
563
69a83fad8a35
improve hash key handling
Mike Becker <universe@uap-core.de>
parents:
558
diff
changeset
|
191 | CxHashKey key, |
|
550
89b2a83728b1
#189 basic map implementation
Mike Becker <universe@uap-core.de>
parents:
549
diff
changeset
|
192 | void *value |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
193 | ); |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
194 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
195 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
196 | * Returns an element. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
197 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
198 | void *(*get)( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
199 | const CxMap *map, |
|
563
69a83fad8a35
improve hash key handling
Mike Becker <universe@uap-core.de>
parents:
558
diff
changeset
|
200 | CxHashKey key |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
201 | ); |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
202 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
203 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
204 | * Removes an element. |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
205 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
206 | * Implementations SHALL check if @p targetbuf is set and copy the elements |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
207 | * to the buffer without invoking any destructor. |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
208 | * When @p targetbuf is not set, the destructors SHALL be invoked. |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
209 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
210 | * The function SHALL return zero when the @p key was found and |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
211 | * non-zero, otherwise. |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
212 | */ |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
213 | int (*remove)( |
|
550
89b2a83728b1
#189 basic map implementation
Mike Becker <universe@uap-core.de>
parents:
549
diff
changeset
|
214 | CxMap *map, |
|
686
64919f63f059
add destructor functions for maps - fixes #253
Mike Becker <universe@uap-core.de>
parents:
685
diff
changeset
|
215 | CxHashKey key, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
216 | void *targetbuf |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
217 | ); |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
218 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
219 | /** |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
220 | * Creates an iterator for this map. |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
221 | */ |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
222 | CxMapIterator (*iterator)(const CxMap *map, enum cx_map_iterator_type type); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
223 | }; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
224 | |
|
714
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
225 | /** |
|
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
226 | * A shared instance of an empty map. |
|
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
227 | * |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
228 | * Writing to that map is not allowed. |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
229 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
230 | * You can use this is a placeholder for initializing CxMap pointers |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
231 | * for which you do not want to reserve memory right from the beginning. |
|
714
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
232 | */ |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
233 | cx_attr_export |
|
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
694
diff
changeset
|
234 | extern CxMap *const cxEmptyMap; |
|
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
694
diff
changeset
|
235 | |
|
658
56c62780582e
make hashmap store objects instead of pointers by default - fixes #239
Mike Becker <universe@uap-core.de>
parents:
630
diff
changeset
|
236 | /** |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
237 | * Deallocates the memory of the specified map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
238 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
239 | * Also calls the content destructor functions for each element, if specified. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
240 | * |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
992
diff
changeset
|
241 | * @param map the map to be freed |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
242 | */ |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
243 | cx_attr_export |
|
1109
89ec23988b88
free functions should not be inline in release mode - relates to #541
Mike Becker <universe@uap-core.de>
parents:
1102
diff
changeset
|
244 | void cxMapFree(CxMap *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
245 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
246 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
247 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
248 | * Clears a map by removing all elements. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
249 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
250 | * Also calls the content destructor functions for each element, if specified. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
251 | * |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
252 | * @param map the map to be cleared |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
253 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
254 | cx_attr_nonnull |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
255 | static inline void cxMapClear(CxMap *map) { |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
256 | map->cl->clear(map); |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
257 | } |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
258 | |
|
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
259 | /** |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
260 | * Returns the number of elements in this map. |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
261 | * |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
262 | * @param map the map |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
263 | * @return the number of stored elements |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
264 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
265 | cx_attr_nonnull |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
266 | static inline size_t cxMapSize(const CxMap *map) { |
|
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
267 | return map->collection.size; |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
268 | } |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
269 | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
270 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
271 | * Creates a value iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
272 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
273 | * When the map is storing pointers, those pointers are returned. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
274 | * Otherwise, the iterator iterates over pointers to the memory within the map where the |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
275 | * respective elements are stored. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
276 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
277 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
278 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
279 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
280 | * @param map the map to create the iterator for |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
281 | * @return an iterator for the currently stored values |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
282 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
283 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
284 | cx_attr_nodiscard |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
285 | static inline CxMapIterator cxMapIteratorValues(const CxMap *map) { |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
286 | return map->cl->iterator(map, CX_MAP_ITERATOR_VALUES); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
287 | } |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
288 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
289 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
290 | * Creates a key iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
291 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
292 | * The elements of the iterator are keys of type CxHashKey and the pointer returned |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
293 | * during iterator shall be treated as @c const @c CxHashKey* . |
|
555
d79fbd028e26
fix documentation for map iterators
Mike Becker <universe@uap-core.de>
parents:
553
diff
changeset
|
294 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
295 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
296 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
297 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
298 | * @param map the map to create the iterator for |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
299 | * @return an iterator for the currently stored keys |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
300 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
301 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
302 | cx_attr_nodiscard |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
303 | static inline CxMapIterator cxMapIteratorKeys(const CxMap *map) { |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
304 | return map->cl->iterator(map, CX_MAP_ITERATOR_KEYS); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
305 | } |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
306 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
307 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
308 | * Creates an iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
309 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
310 | * The elements of the iterator are key/value pairs of type CxMapEntry and the pointer returned |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
311 | * during iterator shall be treated as @c const @c CxMapEntry* . |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
312 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
313 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
314 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
315 | * |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
316 | * @param map the map to create the iterator for |
|
555
d79fbd028e26
fix documentation for map iterators
Mike Becker <universe@uap-core.de>
parents:
553
diff
changeset
|
317 | * @return an iterator for the currently stored entries |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
318 | * @see cxMapIteratorKeys() |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
319 | * @see cxMapIteratorValues() |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
320 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
321 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
322 | cx_attr_nodiscard |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
323 | static inline CxMapIterator cxMapIterator(const CxMap *map) { |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
324 | return map->cl->iterator(map, CX_MAP_ITERATOR_PAIRS); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
325 | } |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
326 | |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
327 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
328 | /** |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
329 | * Creates a mutating iterator over the values of a map. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
330 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
331 | * When the map is storing pointers, those pointers are returned. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
332 | * Otherwise, the iterator iterates over pointers to the memory within the map where the |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
333 | * respective elements are stored. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
334 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
335 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
336 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
337 | * |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
338 | * @param map the map to create the iterator for |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
339 | * @return an iterator for the currently stored values |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
340 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
341 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
342 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
343 | cx_attr_export |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
344 | CxMapIterator cxMapMutIteratorValues(CxMap *map); |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
345 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
346 | /** |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
347 | * Creates a mutating iterator over the keys of a map. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
348 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
349 | * The elements of the iterator are keys of type CxHashKey and the pointer returned |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
350 | * during iterator shall be treated as @c const @c CxHashKey* . |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
351 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
352 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
353 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
354 | * |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
355 | * @param map the map to create the iterator for |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
356 | * @return an iterator for the currently stored keys |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
357 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
358 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
359 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
360 | cx_attr_export |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
361 | CxMapIterator cxMapMutIteratorKeys(CxMap *map); |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
362 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
363 | /** |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
364 | * Creates a mutating iterator for a map. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
365 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
366 | * The elements of the iterator are key/value pairs of type CxMapEntry and the pointer returned |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
367 | * during iterator shall be treated as @c const @c CxMapEntry* . |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
368 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
369 | * @note An iterator iterates over all elements successively. Therefore, the order |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
370 | * highly depends on the map implementation and may change arbitrarily when the contents change. |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
371 | * |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
372 | * @param map the map to create the iterator for |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
373 | * @return an iterator for the currently stored entries |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
374 | * @see cxMapMutIteratorKeys() |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
375 | * @see cxMapMutIteratorValues() |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
376 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
377 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
378 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
379 | cx_attr_export |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
380 | CxMapIterator cxMapMutIterator(CxMap *map); |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
381 | |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
382 | #ifdef __cplusplus |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
383 | } // end the extern "C" block here, because we want to start overloading |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
384 | cx_attr_nonnull |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
385 | static inline int cxMapPut( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
386 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
387 | CxHashKey const &key, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
388 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
389 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
390 | return map->cl->put(map, key, value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
391 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
392 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
393 | cx_attr_nonnull |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
394 | static inline int cxMapPut( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
395 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
396 | cxstring const &key, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
397 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
398 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
399 | return map->cl->put(map, cx_hash_key_cxstr(key), value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
400 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
401 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
402 | cx_attr_nonnull |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
403 | static inline int cxMapPut( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
404 | CxMap *map, |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
405 | cxmutstr const &key, |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
406 | void *value |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
407 | ) { |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
408 | return map->cl->put(map, cx_hash_key_cxstr(key), value); |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
409 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
410 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
411 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
412 | cx_attr_cstr_arg(2) |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
413 | static inline int cxMapPut( |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
414 | CxMap *map, |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
415 | const char *key, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
416 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
417 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
418 | return map->cl->put(map, cx_hash_key_str(key), value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
419 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
420 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
421 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
422 | cx_attr_nodiscard |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
423 | static inline void *cxMapGet( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
424 | const CxMap *map, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
425 | CxHashKey const &key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
426 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
427 | return map->cl->get(map, key); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
428 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
429 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
430 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
431 | cx_attr_nodiscard |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
432 | static inline void *cxMapGet( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
433 | const CxMap *map, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
434 | cxstring const &key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
435 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
436 | return map->cl->get(map, cx_hash_key_cxstr(key)); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
437 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
438 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
439 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
440 | cx_attr_nodiscard |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
441 | static inline void *cxMapGet( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
442 | const CxMap *map, |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
443 | cxmutstr const &key |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
444 | ) { |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
445 | return map->cl->get(map, cx_hash_key_cxstr(key)); |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
446 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
447 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
448 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
449 | cx_attr_nodiscard |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
450 | cx_attr_cstr_arg(2) |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
451 | static inline void *cxMapGet( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
452 | const CxMap *map, |
|
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
453 | const char *key |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
454 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
455 | return map->cl->get(map, cx_hash_key_str(key)); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
456 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
457 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
458 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
459 | static inline int cxMapRemove( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
460 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
461 | CxHashKey const &key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
462 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
463 | return map->cl->remove(map, key, nullptr); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
464 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
465 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
466 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
467 | static inline int cxMapRemove( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
468 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
469 | cxstring const &key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
470 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
471 | return map->cl->remove(map, cx_hash_key_cxstr(key), nullptr); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
472 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
473 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
474 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
475 | static inline int cxMapRemove( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
476 | CxMap *map, |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
477 | cxmutstr const &key |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
478 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
479 | return map->cl->remove(map, cx_hash_key_cxstr(key), nullptr); |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
480 | } |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
481 | |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
482 | cx_attr_nonnull |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
483 | cx_attr_cstr_arg(2) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
484 | static inline int cxMapRemove( |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
485 | CxMap *map, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
486 | const char *key |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
487 | ) { |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
488 | return map->cl->remove(map, cx_hash_key_str(key), nullptr); |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
489 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
490 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
491 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
492 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
493 | static inline int cxMapRemoveAndGet( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
494 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
495 | CxHashKey key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
496 | void *targetbuf |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
497 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
498 | return map->cl->remove(map, key, targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
499 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
500 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
501 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
502 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
503 | static inline int cxMapRemoveAndGet( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
504 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
505 | cxstring key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
506 | void *targetbuf |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
507 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
508 | return map->cl->remove(map, cx_hash_key_cxstr(key), targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
509 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
510 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
511 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
512 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
513 | static inline int cxMapRemoveAndGet( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
514 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
515 | cxmutstr key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
516 | void *targetbuf |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
517 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
518 | return map->cl->remove(map, cx_hash_key_cxstr(key), targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
519 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
520 | |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
521 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
522 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
523 | cx_attr_cstr_arg(2) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
524 | static inline int cxMapRemoveAndGet( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
525 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
526 | const char *key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
527 | void *targetbuf |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
528 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
529 | return map->cl->remove(map, cx_hash_key_str(key), targetbuf); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
530 | } |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
531 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
532 | #else // __cplusplus |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
533 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
534 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
535 | * @copydoc cxMapPut() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
536 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
537 | cx_attr_nonnull |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
538 | static inline int cx_map_put( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
539 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
540 | CxHashKey key, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
541 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
542 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
543 | return map->cl->put(map, key, value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
544 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
545 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
546 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
547 | * @copydoc cxMapPut() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
548 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
549 | cx_attr_nonnull |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
550 | static inline int cx_map_put_cxstr( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
551 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
552 | cxstring key, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
553 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
554 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
555 | return map->cl->put(map, cx_hash_key_cxstr(key), value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
556 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
557 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
558 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
559 | * @copydoc cxMapPut() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
560 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
561 | cx_attr_nonnull |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
562 | static inline int cx_map_put_mustr( |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
563 | CxMap *map, |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
564 | cxmutstr key, |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
565 | void *value |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
566 | ) { |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
567 | return map->cl->put(map, cx_hash_key_cxstr(key), value); |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
568 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
569 | |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
570 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
571 | * @copydoc cxMapPut() |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
572 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
573 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
574 | cx_attr_cstr_arg(2) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
575 | static inline int cx_map_put_str( |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
576 | CxMap *map, |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
577 | const char *key, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
578 | void *value |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
579 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
580 | return map->cl->put(map, cx_hash_key_str(key), value); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
581 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
582 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
583 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
584 | * Puts a key/value-pair into the map. |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
585 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
586 | * A possible existing value will be overwritten. |
|
1114
ad5eeb256242
fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
587 | * If destructor functions are specified, they are called for |
|
ad5eeb256242
fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
588 | * the overwritten element. |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
589 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
590 | * If this map is storing pointers, the @p value pointer is written |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
591 | * to the map. Otherwise, the memory is copied from @p value with |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
592 | * memcpy(). |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
593 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
594 | * The @p key is always copied. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
595 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
596 | * @param map (@c CxMap*) the map |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
597 | * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
598 | * @param value (@c void*) the value |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
599 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
600 | * @retval non-zero value on memory allocation failure |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
601 | */ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
602 | #define cxMapPut(map, key, value) _Generic((key), \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
603 | CxHashKey: cx_map_put, \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
604 | cxstring: cx_map_put_cxstr, \ |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
605 | cxmutstr: cx_map_put_mustr, \ |
|
694
ac827d873c17
fix missing controlling-expression for char const*
Mike Becker <universe@uap-core.de>
parents:
692
diff
changeset
|
606 | char*: cx_map_put_str, \ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
607 | const char*: cx_map_put_str) \ |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
608 | (map, key, value) |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
609 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
610 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
611 | * @copydoc cxMapGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
612 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
613 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
614 | cx_attr_nodiscard |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
615 | static inline void *cx_map_get( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
616 | const CxMap *map, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
617 | CxHashKey key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
618 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
619 | return map->cl->get(map, key); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
620 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
621 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
622 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
623 | * @copydoc cxMapGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
624 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
625 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
626 | cx_attr_nodiscard |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
627 | static inline void *cx_map_get_cxstr( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
628 | const CxMap *map, |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
629 | cxstring key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
630 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
631 | return map->cl->get(map, cx_hash_key_cxstr(key)); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
632 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
633 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
634 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
635 | * @copydoc cxMapGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
636 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
637 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
638 | cx_attr_nodiscard |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
639 | static inline void *cx_map_get_mustr( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
640 | const CxMap *map, |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
641 | cxmutstr key |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
642 | ) { |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
643 | return map->cl->get(map, cx_hash_key_cxstr(key)); |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
644 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
645 | |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
646 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
647 | * @copydoc cxMapGet() |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
648 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
649 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
650 | cx_attr_nodiscard |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
651 | cx_attr_cstr_arg(2) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
652 | static inline void *cx_map_get_str( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
653 | const CxMap *map, |
|
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
654 | const char *key |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
655 | ) { |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
656 | return map->cl->get(map, cx_hash_key_str(key)); |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
657 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
658 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
659 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
660 | * Retrieves a value by using a key. |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
661 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
662 | * If this map is storing pointers, the stored pointer is returned. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
663 | * Otherwise, a pointer to the element within the map's memory |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
664 | * is returned (which is valid as long as the element stays in the map). |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
665 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
666 | * @param map (@c CxMap*) the map |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
667 | * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
668 | * @return (@c void*) the value |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
669 | */ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
670 | #define cxMapGet(map, key) _Generic((key), \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
671 | CxHashKey: cx_map_get, \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
672 | cxstring: cx_map_get_cxstr, \ |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
673 | cxmutstr: cx_map_get_mustr, \ |
|
694
ac827d873c17
fix missing controlling-expression for char const*
Mike Becker <universe@uap-core.de>
parents:
692
diff
changeset
|
674 | char*: cx_map_get_str, \ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
675 | const char*: cx_map_get_str) \ |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
676 | (map, key) |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
677 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
678 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
679 | * @copydoc cxMapRemove() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
680 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
681 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
682 | static inline int cx_map_remove( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
683 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
684 | CxHashKey key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
685 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
686 | return map->cl->remove(map, key, NULL); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
687 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
688 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
689 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
690 | * @copydoc cxMapRemove() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
691 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
692 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
693 | static inline int cx_map_remove_cxstr( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
694 | CxMap *map, |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
695 | cxstring key |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
696 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
697 | return map->cl->remove(map, cx_hash_key_cxstr(key), NULL); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
698 | } |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
699 | |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
700 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
701 | * @copydoc cxMapRemove() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
702 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
703 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
704 | static inline int cx_map_remove_mustr( |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
705 | CxMap *map, |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
706 | cxmutstr key |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
707 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
708 | return map->cl->remove(map, cx_hash_key_cxstr(key), NULL); |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
709 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
710 | |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
711 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
712 | * @copydoc cxMapRemove() |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
713 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
714 | cx_attr_nonnull |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
715 | cx_attr_cstr_arg(2) |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
716 | static inline int cx_map_remove_str( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
717 | CxMap *map, |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
718 | const char *key |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
719 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
720 | return map->cl->remove(map, cx_hash_key_str(key), NULL); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
721 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
722 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
723 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
724 | * Removes a key/value-pair from the map by using the key. |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
725 | * |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
726 | * Always invokes the destructors functions, if any, on the removed element. |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
727 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
728 | * @param map (@c CxMap*) the map |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
729 | * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
730 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
731 | * @retval non-zero the key was not found |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
732 | * |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
733 | * @see cxMapRemoveAndGet() |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
734 | */ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
735 | #define cxMapRemove(map, key) _Generic((key), \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
736 | CxHashKey: cx_map_remove, \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
737 | cxstring: cx_map_remove_cxstr, \ |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
738 | cxmutstr: cx_map_remove_mustr, \ |
|
694
ac827d873c17
fix missing controlling-expression for char const*
Mike Becker <universe@uap-core.de>
parents:
692
diff
changeset
|
739 | char*: cx_map_remove_str, \ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
740 | const char*: cx_map_remove_str) \ |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
741 | (map, key) |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
742 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
743 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
744 | * @copydoc cxMapRemoveAndGet() |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
745 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
746 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
747 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
748 | static inline int cx_map_remove_and_get( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
749 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
750 | CxHashKey key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
751 | void *targetbuf |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
752 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
753 | return map->cl->remove(map, key, targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
754 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
755 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
756 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
757 | * @copydoc cxMapRemoveAndGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
758 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
759 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
760 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
761 | static inline int cx_map_remove_and_get_cxstr( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
762 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
763 | cxstring key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
764 | void *targetbuf |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
765 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
766 | return map->cl->remove(map, cx_hash_key_cxstr(key), targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
767 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
768 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
769 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
770 | * @copydoc cxMapRemoveAndGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
771 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
772 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
773 | cx_attr_access_w(3) |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
774 | static inline int cx_map_remove_and_get_mustr( |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
775 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
776 | cxmutstr key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
777 | void *targetbuf |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
778 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
779 | return map->cl->remove(map, cx_hash_key_cxstr(key), targetbuf); |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
780 | } |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
781 | |
|
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
782 | /** |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
783 | * @copydoc cxMapRemoveAndGet() |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
784 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
785 | cx_attr_nonnull |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
786 | cx_attr_access_w(3) |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
787 | cx_attr_cstr_arg(2) |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
788 | static inline int cx_map_remove_and_get_str( |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
789 | CxMap *map, |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
790 | const char *key, |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
791 | void *targetbuf |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
792 | ) { |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
793 | return map->cl->remove(map, cx_hash_key_str(key), targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
794 | } |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
795 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
796 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
797 | * Removes a key/value-pair from the map by using the key. |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
798 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
799 | * This function will copy the contents of the removed element |
|
1114
ad5eeb256242
fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
800 | * to the target buffer, which must be guaranteed to be large enough |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
801 | * to hold the element (the map's element size). |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
802 | * The destructor functions, if any, will @em not be called. |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
803 | * |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
804 | * If this map is storing pointers, the element is the pointer itself |
|
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
805 | * and not the object it points to. |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
806 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
807 | * @param map (@c CxMap*) the map |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
808 | * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
809 | * @param targetbuf (@c void*) the buffer where the element shall be copied to |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
810 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
811 | * @retval non-zero the key was not found |
|
1111
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1109
diff
changeset
|
812 | * |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
813 | * @see cxMapRemove() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
814 | */ |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
815 | #define cxMapRemoveAndGet(map, key, targetbuf) _Generic((key), \ |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
816 | CxHashKey: cx_map_remove_and_get, \ |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
817 | cxstring: cx_map_remove_and_get_cxstr, \ |
|
692
6ac92936cd44
add cxmutstr to the map generics
Mike Becker <universe@uap-core.de>
parents:
691
diff
changeset
|
818 | cxmutstr: cx_map_remove_and_get_mustr, \ |
|
694
ac827d873c17
fix missing controlling-expression for char const*
Mike Becker <universe@uap-core.de>
parents:
692
diff
changeset
|
819 | char*: cx_map_remove_and_get_str, \ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
820 | const char*: cx_map_remove_and_get_str) \ |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
821 | (map, key, targetbuf) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
822 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
823 | #endif // __cplusplus |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
824 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
825 | #endif // UCX_MAP_H |