Sun, 23 Nov 2025 13:15:19 +0100
optimize sorted insertion by using the infimum instead of the supremum
The reason is that the supremum returns the equal element with the smallest index, and we want the largest.
Therefore, we use the infimum, which already gives us the largest index when there are equal elements, and increase the index by one. The infimum is also guaranteed to exist in that case.
|
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 | |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
44 | #ifndef UCX_LIST_H |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
45 | // forward-declare CxList |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
46 | typedef struct cx_list_s CxList; |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
47 | #endif |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
48 | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | #ifdef __cplusplus |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | extern "C" { |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | #endif |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | /** Type for the UCX map. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | typedef struct cx_map_s CxMap; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
55 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | /** Type for a map entry. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | typedef struct cx_map_entry_s CxMapEntry; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
59 | /** Type for a map iterator. */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
60 | typedef struct cx_map_iterator_s CxMapIterator; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
61 | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
62 | /** Type for map class definitions. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
63 | typedef struct cx_map_class_s cx_map_class; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
64 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
65 | /** Structure for the UCX map. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | 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
|
67 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
68 | * Base attributes. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
69 | */ |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
70 | CX_COLLECTION_BASE; |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | /** The map class definition. */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
72 | cx_map_class *cl; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | }; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
74 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | /** |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
76 | * A map entry. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
77 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
78 | struct cx_map_entry_s { |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
79 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
80 | * A pointer to the key. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
81 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
82 | const CxHashKey *key; |
|
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 | * A pointer to the value. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
85 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
86 | void *value; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
87 | }; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
88 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
89 | /** |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
90 | * The type of iterator for a map. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
91 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
92 | enum cx_map_iterator_type { |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
93 | /** |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
94 | * Iterates over key/value pairs. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
95 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
96 | CX_MAP_ITERATOR_PAIRS, |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
97 | /** |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
98 | * Iterates over keys only. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
99 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
100 | CX_MAP_ITERATOR_KEYS, |
|
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 | * Iterates over values only. |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
103 | */ |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
104 | CX_MAP_ITERATOR_VALUES |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
105 | }; |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
106 | |
|
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
107 | /** |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
108 | * Internal iterator struct - use CxMapIterator. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
109 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
110 | struct cx_map_iterator_s { |
|
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 | * Inherited common data for all iterators. |
|
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 | CX_ITERATOR_BASE; |
|
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 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
117 | * Handle for the source map. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
118 | */ |
|
1429
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents:
1426
diff
changeset
|
119 | CxMap *map; |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
120 | |
|
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 | * Handle for the current element. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
123 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
124 | * @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
|
125 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
126 | void *elem; |
|
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 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
129 | * Reserved memory for a map entry. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
130 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
131 | * 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
|
132 | * 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
|
133 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
134 | CxMapEntry entry; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
135 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
136 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
137 | * Field for storing the current slot number. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
138 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
139 | * (Used internally) |
|
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 | size_t slot; |
|
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 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
144 | * Counts the elements successfully. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
145 | * 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
|
146 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
147 | size_t index; |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
148 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
149 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
150 | * 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
|
151 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
152 | size_t elem_size; |
|
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 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
155 | * 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
|
156 | * 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
|
157 | * |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
158 | * @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
|
159 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
160 | size_t elem_count; |
|
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 | /** |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
163 | * The type of this iterator. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
164 | */ |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
165 | enum cx_map_iterator_type type; |
|
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 | |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
168 | /** |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
169 | * The class definition for arbitrary maps. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
171 | struct cx_map_class_s { |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | * Deallocates the entire memory. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | */ |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
992
diff
changeset
|
175 | void (*deallocate)(struct cx_map_s *map); |
|
549
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 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | * Removes all elements. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | */ |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | void (*clear)(struct cx_map_s *map); |
|
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 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | * Add or overwrite an element. |
| 1341 | 184 | * If the @p value is @c NULL, the implementation |
| 185 | * shall only allocate memory instead of adding an existing value to the map. | |
| 186 | * Returns a pointer to the allocated memory or @c NULL if allocation fails. | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
188 | void *(*put)(CxMap *map, CxHashKey key, void *value); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
191 | * Returns an element. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
192 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
193 | void *(*get)(const CxMap *map, CxHashKey key); |
|
549
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 | * Removes an element. |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
197 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
198 | * 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
|
199 | * 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
|
200 | * 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
|
201 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
202 | * 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
|
203 | * non-zero, otherwise. |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
204 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
205 | int (*remove)(CxMap *map, CxHashKey key, void *targetbuf); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
206 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
207 | /** |
|
709
1e8ba59e7911
simplify map class structure
Mike Becker <universe@uap-core.de>
parents:
706
diff
changeset
|
208 | * Creates an iterator for this map. |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
209 | */ |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
210 | 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
|
211 | }; |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
212 | |
|
714
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
213 | /** |
|
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
214 | * A shared instance of an empty map. |
|
34565d898f1f
add missing docs for cxEmptyMap
Mike Becker <universe@uap-core.de>
parents:
710
diff
changeset
|
215 | * |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
216 | * 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
|
217 | * |
|
1424
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents:
1411
diff
changeset
|
218 | * You can use this as a placeholder for initializing CxMap pointers |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
219 | * 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
|
220 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
221 | CX_EXPORT extern CxMap *const cxEmptyMap; |
|
706
8c6edaccaef1
add empty map implementation - fixes #259
Mike Becker <universe@uap-core.de>
parents:
694
diff
changeset
|
222 | |
|
658
56c62780582e
make hashmap store objects instead of pointers by default - fixes #239
Mike Becker <universe@uap-core.de>
parents:
630
diff
changeset
|
223 | /** |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
224 | * Deallocates the memory of the specified map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
225 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
226 | * 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
|
227 | * |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
992
diff
changeset
|
228 | * @param map the map to be freed |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
229 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
230 | CX_EXPORT void cxMapFree(CxMap *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
231 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
232 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
233 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
234 | * Clears a map by removing all elements. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
235 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
236 | * 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
|
237 | * |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
238 | * @param map the map to be cleared |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
239 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
240 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
241 | CX_EXPORT void cxMapClear(CxMap *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
242 | |
|
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
243 | /** |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
244 | * 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
|
245 | * |
|
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
246 | * @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
|
247 | * @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
|
248 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
249 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
250 | CX_EXPORT 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
|
251 | |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
252 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
253 | * Creates a value iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
254 | * |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
255 | * 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
|
256 | * 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
|
257 | * respective elements are stored. |
|
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
258 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
259 | * @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
|
260 | * 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
|
261 | * |
|
1344
8afaeb395b3c
add support for NULL in map iterators
Mike Becker <universe@uap-core.de>
parents:
1341
diff
changeset
|
262 | * @param map the map to create the iterator for (can be @c NULL) |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
263 | * @return an iterator for the currently stored values |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
264 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
265 | cx_attr_nodiscard |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
266 | CX_EXPORT CxMapIterator cxMapIteratorValues(const CxMap *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
267 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
268 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
269 | * Creates a key iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
270 | * |
|
1424
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents:
1411
diff
changeset
|
271 | * The elements of the iterator are keys of type CxHashKey, and the pointer returned |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
272 | * 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
|
273 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
274 | * @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
|
275 | * 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
|
276 | * |
|
1344
8afaeb395b3c
add support for NULL in map iterators
Mike Becker <universe@uap-core.de>
parents:
1341
diff
changeset
|
277 | * @param map the map to create the iterator for (can be @c NULL) |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
278 | * @return an iterator for the currently stored keys |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
279 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
280 | cx_attr_nodiscard |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
281 | CX_EXPORT CxMapIterator cxMapIteratorKeys(const CxMap *map); |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
282 | |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
283 | /** |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
284 | * Creates an iterator for a map. |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
285 | * |
|
1424
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents:
1411
diff
changeset
|
286 | * The elements of the iterator are key/value pairs of type CxMapEntry, and the pointer returned |
|
1115
6db21dee4929
create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents:
1114
diff
changeset
|
287 | * 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
|
288 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
289 | * @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
|
290 | * 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
|
291 | * |
|
1344
8afaeb395b3c
add support for NULL in map iterators
Mike Becker <universe@uap-core.de>
parents:
1341
diff
changeset
|
292 | * @param map the map to create the iterator for (can be @c NULL) |
|
555
d79fbd028e26
fix documentation for map iterators
Mike Becker <universe@uap-core.de>
parents:
553
diff
changeset
|
293 | * @return an iterator for the currently stored entries |
|
549
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
294 | * @see cxMapIteratorKeys() |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
295 | * @see cxMapIteratorValues() |
|
d7f0b5a9a985
#189 declare basic map functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
296 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
297 | cx_attr_nodiscard |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
298 | CX_EXPORT CxMapIterator cxMapIterator(const CxMap *map); |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
299 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
564
diff
changeset
|
300 | /** |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
301 | * Puts a key/value-pair into the map. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
302 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
303 | * A possible existing value will be overwritten. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
304 | * If destructor functions are specified, they are called for |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
305 | * the overwritten element. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
306 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
307 | * If this map is storing pointers, the @p value pointer is written |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
308 | * to the map. Otherwise, the memory is copied from @p value with |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
309 | * memcpy(). |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
310 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
311 | * The @p key is always copied. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
312 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
313 | * @param map the map |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
314 | * @param key the key |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
315 | * @param value the value |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
316 | * @retval zero success |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
317 | * @retval non-zero value on memory allocation failure |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
318 | * @see cxMapPut() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
319 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
984
diff
changeset
|
320 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
321 | CX_EXPORT int cx_map_put(CxMap *map, CxHashKey key, void *value); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
322 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
323 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
324 | * 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
|
325 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
326 | * 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
|
327 | * 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
|
328 | * the overwritten element. |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
329 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
330 | * 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
|
331 | * 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
|
332 | * memcpy(). |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
333 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
334 | * The @p key is always copied. |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
335 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
336 | * @param map (@c CxMap*) the map |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
337 | * @param key (any supported key type) the key |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
338 | * @param value (@c void*) the value |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
339 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
340 | * @retval non-zero value on memory allocation failure |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
341 | * @see CX_HASH_KEY() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
342 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
343 | #define cxMapPut(map, key, value) cx_map_put(map, CX_HASH_KEY(key), value) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
344 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
345 | /** |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
346 | * Allocates memory for a value in the map associated with the specified key. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
347 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
348 | * A possible existing value will be overwritten. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
349 | * If destructor functions are specified, they are called for |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
350 | * the overwritten element. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
351 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
352 | * If the map is storing pointers, this function returns a @c void** pointer, |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
353 | * meaning a pointer to that pointer. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
354 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
355 | * The @p key is always copied. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
356 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
357 | * @param map the map |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
358 | * @param key the key |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
359 | * @return the pointer to the allocated memory or @c NULL if allocation fails |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
360 | * @retval zero success |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
361 | * @retval non-zero value on memory allocation failure |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
362 | * @see cxMapEmplace() |
| 1341 | 363 | */ |
| 364 | cx_attr_nonnull | |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
365 | CX_EXPORT void *cx_map_emplace(CxMap *map, CxHashKey key); |
| 1341 | 366 | |
| 367 | /** | |
| 368 | * Allocates memory for a value in the map associated with the specified key. | |
| 369 | * | |
| 370 | * A possible existing value will be overwritten. | |
| 371 | * If destructor functions are specified, they are called for | |
| 372 | * the overwritten element. | |
| 373 | * | |
| 374 | * If the map is storing pointers, this function returns a @c void** pointer, | |
| 375 | * meaning a pointer to that pointer. | |
| 376 | * | |
| 377 | * The @p key is always copied. | |
| 378 | * | |
| 379 | * @param map (@c CxMap*) the map | |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
380 | * @param key (any supported key type) the key |
| 1341 | 381 | * @return the pointer to the allocated memory or @c NULL if allocation fails |
| 382 | * @retval zero success | |
| 383 | * @retval non-zero value on memory allocation failure | |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
384 | * @see CX_HASH_KEY() |
| 1341 | 385 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
386 | #define cxMapEmplace(map, key) cx_map_emplace(map, CX_HASH_KEY(key)) |
| 1341 | 387 | |
| 388 | /** | |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
389 | * Retrieves a value by using a key. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
390 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
391 | * If this map is storing pointers, the stored pointer is returned. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
392 | * Otherwise, a pointer to the element within the map's memory |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
393 | * is returned (which is valid as long as the element stays in the map). |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
394 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
395 | * @param map the map |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
396 | * @param key the key |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
397 | * @return the value |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
398 | * @see cxMapGet() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
399 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
400 | cx_attr_nonnull cx_attr_nodiscard |
|
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
401 | CX_EXPORT void *cx_map_get(const CxMap *map, CxHashKey key); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
402 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
403 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
404 | * Retrieves a value by using a key. |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
405 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
406 | * 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
|
407 | * 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
|
408 | * 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
|
409 | * |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
410 | * @param map (@c CxMap*) the map |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
411 | * @param key (any supported key type) the key |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
412 | * @return (@c void*) the value or @c NULL when no value with that @p key exists |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
413 | * @see CX_HASH_KEY() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
414 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
415 | #define cxMapGet(map, key) cx_map_get(map, CX_HASH_KEY(key)) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
416 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
417 | /** |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
418 | * Checks if a map contains a specific key. |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
419 | * |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
420 | * @param map (@c CxMap*) the map |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
421 | * @param key (any supported key type) the key |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
422 | * @retval true if the key exists in the map |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
423 | * @retval false if the key does not exist in the map |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
424 | * @see CX_HASH_KEY() |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
425 | */ |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
426 | #define cxMapContains(map, key) (cxMapGet(map, key) != NULL) |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
427 | |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
428 | /** |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
429 | * 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
|
430 | * |
|
1424
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents:
1411
diff
changeset
|
431 | * Invokes the destructor functions, if any, on the removed element if and only if the |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
432 | * @p targetbuf is @c NULL. |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
433 | * |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
434 | * @param map the map |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
435 | * @param key the key |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
436 | * @param targetbuf the optional buffer where the removed element shall be copied to |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
437 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
438 | * @retval non-zero the key was not found |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
439 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
440 | * @see cxMapRemove() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
441 | * @see cxMapRemoveAndGet() |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
442 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
443 | cx_attr_nonnull_arg(1) |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1424
diff
changeset
|
444 | CX_EXPORT int cx_map_remove(CxMap *map, CxHashKey key, void *targetbuf); |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
445 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
446 | /** |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
447 | * Removes a key/value-pair from the map by using the key. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
448 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
449 | * Always invokes the destructor functions, if any, on the removed element. |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
450 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
451 | * @param map (@c CxMap*) the map |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
452 | * @param key (any supported key type) the key |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
453 | * @retval zero success |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
454 | * @retval non-zero the key was not found |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
455 | * |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
456 | * @see cxMapRemoveAndGet() |
|
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
457 | * @see CX_HASH_KEY() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
458 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
459 | #define cxMapRemove(map, key) cx_map_remove(map, CX_HASH_KEY(key), NULL) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
460 | |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
461 | /** |
|
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
462 | * 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
|
463 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
464 | * 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
|
465 | * 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
|
466 | * 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
|
467 | * 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
|
468 | * |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
469 | * 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
|
470 | * 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
|
471 | * |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
472 | * @param map (@c CxMap*) the map |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
473 | * @param key (any supported key type) the key |
|
1102
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
474 | * @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
|
475 | * @retval zero success |
|
db5e355e5349
refine docs for map.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
994
diff
changeset
|
476 | * @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
|
477 | * |
|
994
3603bdf4a78b
remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
478 | * @see cxMapRemove() |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
479 | * @see CX_HASH_KEY() |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
480 | */ |
|
1408
aaa440cd4125
change map.h to use new CX_HASH_KEY macro
Mike Becker <universe@uap-core.de>
parents:
1344
diff
changeset
|
481 | #define cxMapRemoveAndGet(map, key, targetbuf) cx_map_remove(map, CX_HASH_KEY(key), targetbuf) |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
482 | |
|
1437
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
483 | |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
484 | /** |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
485 | * Performs a deep clone of one map into another. |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
486 | * |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
487 | * If the destination map already contains entries, the cloned entries |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
488 | * are added to that map, possibly overwriting existing elements when |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
489 | * the keys already exist. |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
490 | * |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
491 | * When elements in the destination map need to be replaced, any destructor |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
492 | * function is called on the replaced elements before replacing them. |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
493 | * |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
494 | * @attention If the cloned elements need to be destroyed by a destructor |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
495 | * function, you must make sure that the destination map also uses this |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
496 | * destructor function. |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
497 | * |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
498 | * @param dst the destination map |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
499 | * @param src the source map |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
500 | * @param clone_func the clone function for the values |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
501 | * @param clone_allocator the allocator that is passed to the clone function |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
502 | * @param data optional additional data that is passed to the clone function |
|
1444
dd9dcbb39c2f
make clone functions return int instead of size_t
Mike Becker <universe@uap-core.de>
parents:
1437
diff
changeset
|
503 | * @retval zero when all elements were successfully cloned |
|
dd9dcbb39c2f
make clone functions return int instead of size_t
Mike Becker <universe@uap-core.de>
parents:
1437
diff
changeset
|
504 | * @retval non-zero when an allocation error occurred |
|
1437
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
505 | */ |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
506 | cx_attr_nonnull_arg(1, 2, 3) |
|
1444
dd9dcbb39c2f
make clone functions return int instead of size_t
Mike Becker <universe@uap-core.de>
parents:
1437
diff
changeset
|
507 | CX_EXPORT int cxMapClone(CxMap *dst, const CxMap *src, |
|
1437
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
508 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
dde4903c0fd7
untested draft of cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents:
1429
diff
changeset
|
509 | |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
510 | |
|
1447
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
511 | /** |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
512 | * Clones entries of a map if their key is not present in another map. |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
513 | * |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
514 | * @param dst the destination map |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
515 | * @param minuend the map to subtract the entries from |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
516 | * @param subtrahend the map containing the elements to be subtracted |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
517 | * @param clone_func the clone function for the values |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
518 | * @param clone_allocator the allocator that is passed to the clone function |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
519 | * @param data optional additional data that is passed to the clone function |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
520 | * @retval zero when the elements were successfully cloned |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
521 | * @retval non-zero when an allocation error occurred |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
522 | */ |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
523 | cx_attr_nonnull_arg(1, 2, 3, 4) |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
524 | CX_EXPORT int cxMapDifference(CxMap *dst, const CxMap *minuend, const CxMap *subtrahend, |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
525 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
526 | |
|
1447
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
527 | /** |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
528 | * Clones entries of a map if their key is not present in a list. |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
529 | * |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
530 | * Note that the list must contain keys of type @c CxKey |
|
1448
0f0fe7311b76
add tests for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1447
diff
changeset
|
531 | * (or pointers to such keys) and must use @c cx_hash_key_cmp |
|
0f0fe7311b76
add tests for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1447
diff
changeset
|
532 | * as the compare function. |
|
1447
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
533 | * Generic key types cannot be processed in this case. |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
534 | * |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
535 | * @param dst the destination map |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
536 | * @param src the source map |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
537 | * @param keys the list of @c CxKey items |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
538 | * @param clone_func the clone function for the values |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
539 | * @param clone_allocator the allocator that is passed to the clone function |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
540 | * @param data optional additional data that is passed to the clone function |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
541 | * @retval zero when the elements were successfully cloned |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
542 | * @retval non-zero when an allocation error occurred |
|
aaf85b3e9601
add documentation for cxMapDifference() and cxMapListDifference()
Mike Becker <universe@uap-core.de>
parents:
1445
diff
changeset
|
543 | */ |
|
1445
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
544 | cx_attr_nonnull_arg(1, 2, 3, 4) |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
545 | CX_EXPORT int cxMapListDifference(CxMap *dst, const CxMap *src, const CxList *keys, |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
546 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
e8089a590b71
add implementations for map difference
Mike Becker <universe@uap-core.de>
parents:
1444
diff
changeset
|
547 | |
|
1465
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
548 | |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
549 | /** |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
550 | * Clones entries of a map only if their key is present in another map. |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
551 | * |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
552 | * @param dst the destination map |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
553 | * @param src the map to clone the entries from |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
554 | * @param other the map to check for existence of the keys |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
555 | * @param clone_func the clone function for the values |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
556 | * @param clone_allocator the allocator that is passed to the clone function |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
557 | * @param data optional additional data that is passed to the clone function |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
558 | * @retval zero when the elements were successfully cloned |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
559 | * @retval non-zero when an allocation error occurred |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
560 | */ |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
561 | cx_attr_nonnull_arg(1, 2, 3, 4) |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
562 | CX_EXPORT int cxMapIntersection(CxMap *dst, const CxMap *src, const CxMap *other, |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
563 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
564 | |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
565 | /** |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
566 | * Clones entries of a map only if their key is present in a list. |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
567 | * |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
568 | * Note that the list must contain keys of type @c CxKey |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
569 | * (or pointers to such keys) and must use @c cx_hash_key_cmp |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
570 | * as the compare function. |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
571 | * Generic key types cannot be processed in this case. |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
572 | * |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
573 | * @param dst the destination map |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
574 | * @param src the source map |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
575 | * @param keys the list of @c CxKey items |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
576 | * @param clone_func the clone function for the values |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
577 | * @param clone_allocator the allocator that is passed to the clone function |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
578 | * @param data optional additional data that is passed to the clone function |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
579 | * @retval zero when the elements were successfully cloned |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
580 | * @retval non-zero when an allocation error occurred |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
581 | */ |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
582 | cx_attr_nonnull_arg(1, 2, 3, 4) |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
583 | CX_EXPORT int cxMapListIntersection(CxMap *dst, const CxMap *src, const CxList *keys, |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
584 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
dc886f1a6155
specify the intersection functions
Mike Becker <universe@uap-core.de>
parents:
1448
diff
changeset
|
585 | |
|
1474
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
586 | /** |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
587 | * Clones entries into a map if their key does not exist yet. |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
588 | * |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
589 | * If you want to calculate the union of two maps into a fresh new map, |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
590 | * you can proceed as follows: |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
591 | * 1. Clone the first map into a fresh, empty map. |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
592 | * 2. Use this function to clone the second map into the result from step 1. |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
593 | * |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
594 | * @param dst the destination map |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
595 | * @param src the map to clone the entries from |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
596 | * @param clone_func the clone function for the values |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
597 | * @param clone_allocator the allocator that is passed to the clone function |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
598 | * @param data optional additional data that is passed to the clone function |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
599 | * @retval zero when the elements were successfully cloned |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
600 | * @retval non-zero when an allocation error occurred |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
601 | */ |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
602 | cx_attr_nonnull_arg(1, 2, 3) |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
603 | CX_EXPORT int cxMapUnion(CxMap *dst, const CxMap *src, |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
604 | cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data); |
|
84de0ba791af
implement cxMapUnion() - resolves #756
Mike Becker <universe@uap-core.de>
parents:
1465
diff
changeset
|
605 | |
|
1479
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
606 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
607 | * Performs a shallow clone of one map into another. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
608 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
609 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
610 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
611 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
612 | * If the destination map already contains entries, the cloned entries |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
613 | * are added to that map, possibly overwriting existing elements when |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
614 | * the keys already exist. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
615 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
616 | * When elements in the destination map need to be replaced, any destructor |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
617 | * function is called on the replaced elements before replacing them. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
618 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
619 | * @attention If the cloned elements need to be destroyed by a destructor |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
620 | * function, you must make sure that the destination map also uses this |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
621 | * destructor function. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
622 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
623 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
624 | * @param src the source map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
625 | * @retval zero when all elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
626 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
627 | * @see cxMapClone() |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
628 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
629 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
630 | CX_EXPORT int cxMapCloneSimple(CxMap *dst, const CxMap *src); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
631 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
632 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
633 | * Clones entries of a map if their key is not present in another map. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
634 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
635 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
636 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
637 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
638 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
639 | * @param minuend the map to subtract the entries from |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
640 | * @param subtrahend the map containing the elements to be subtracted |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
641 | * @retval zero when the elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
642 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
643 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
644 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
645 | CX_EXPORT int cxMapDifferenceSimple(CxMap *dst, const CxMap *minuend, const CxMap *subtrahend); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
646 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
647 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
648 | * Clones entries of a map if their key is not present in a list. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
649 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
650 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
651 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
652 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
653 | * Note that the list must contain keys of type @c CxKey |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
654 | * (or pointers to such keys) and must use @c cx_hash_key_cmp |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
655 | * as the compare function. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
656 | * Generic key types cannot be processed in this case. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
657 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
658 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
659 | * @param src the source map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
660 | * @param keys the list of @c CxKey items |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
661 | * @retval zero when the elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
662 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
663 | * @see cxMapListDifference() |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
664 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
665 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
666 | CX_EXPORT int cxMapListDifferenceSimple(CxMap *dst, const CxMap *src, const CxList *keys); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
667 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
668 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
669 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
670 | * Clones entries of a map only if their key is present in another map. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
671 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
672 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
673 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
674 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
675 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
676 | * @param src the map to clone the entries from |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
677 | * @param other the map to check for existence of the keys |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
678 | * @retval zero when the elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
679 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
680 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
681 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
682 | CX_EXPORT int cxMapIntersectionSimple(CxMap *dst, const CxMap *src, const CxMap *other); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
683 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
684 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
685 | * Clones entries of a map only if their key is present in a list. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
686 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
687 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
688 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
689 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
690 | * Note that the list must contain keys of type @c CxKey |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
691 | * (or pointers to such keys) and must use @c cx_hash_key_cmp |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
692 | * as the compare function. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
693 | * Generic key types cannot be processed in this case. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
694 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
695 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
696 | * @param src the source map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
697 | * @param keys the list of @c CxKey items |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
698 | * @retval zero when the elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
699 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
700 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
701 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
702 | CX_EXPORT int cxMapListIntersectionSimple(CxMap *dst, const CxMap *src, const CxList *keys); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
703 | |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
704 | /** |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
705 | * Clones entries into a map if their key does not exist yet. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
706 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
707 | * This function uses the default allocator, if needed, and performs |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
708 | * shallow clones with @c memcpy(). |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
709 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
710 | * If you want to calculate the union of two maps into a fresh new map, |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
711 | * you can proceed as follows: |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
712 | * 1. Clone the first map into a fresh, empty map. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
713 | * 2. Use this function to clone the second map into the result from step 1. |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
714 | * |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
715 | * @param dst the destination map |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
716 | * @param src the map to clone the entries from |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
717 | * @retval zero when the elements were successfully cloned |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
718 | * @retval non-zero when an allocation error occurred |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
719 | */ |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
720 | cx_attr_nonnull |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
721 | CX_EXPORT int cxMapUnionSimple(CxMap *dst, const CxMap *src); |
|
ac1baaed2fd7
implement simple versions of the clone functions
Mike Becker <universe@uap-core.de>
parents:
1474
diff
changeset
|
722 | |
|
1411
838796848e12
fixes regression: missing closing brace in map.h in c++ builds
Mike Becker <universe@uap-core.de>
parents:
1408
diff
changeset
|
723 | #ifdef __cplusplus |
|
838796848e12
fixes regression: missing closing brace in map.h in c++ builds
Mike Becker <universe@uap-core.de>
parents:
1408
diff
changeset
|
724 | } // extern "C" |
|
838796848e12
fixes regression: missing closing brace in map.h in c++ builds
Mike Becker <universe@uap-core.de>
parents:
1408
diff
changeset
|
725 | #endif |
|
838796848e12
fixes regression: missing closing brace in map.h in c++ builds
Mike Becker <universe@uap-core.de>
parents:
1408
diff
changeset
|
726 | |
|
691
65baf7f45ac8
bring a generic interface to CxMap
Mike Becker <universe@uap-core.de>
parents:
689
diff
changeset
|
727 | #endif // UCX_MAP_H |