Tue, 11 Mar 2025 12:05:01 +0100
structur for map.h documentation
relates to #451
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
changeset
|
1 | # Map Interface |
1141 | 2 | |
3 | Similar to the list interface, the map interface provides a common API for implementing maps. | |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
4 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
5 | UCX is shipped with a [hash map](hash_map.h.md) implementation of this interface. |
1141 | 6 | |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
7 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
8 | #include <cx/hash_map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
9 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
10 | CxMap *cxHashMapCreate(const CxAllocator *allocator, |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
11 | size_t itemsize, size_t buckets); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
12 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
13 | CxMap *cxHashMapCreateSimple(size_t itemsize); |
1141 | 14 | ``` |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
15 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
16 | The function `cxHashMapCreate()` creates a new [map](map.h.md) where both the map structure |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
17 | and the contained buckets are allocated by the specified `allocator`. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
18 | The default stdlib allocator is used in `cxHashMapCreateSimple()`. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
19 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
20 | The map will store items of size `itemsize`. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
21 | You can use the `CX_STORE_POINTERS` macro for `itemsize` to indicate that the map shall store |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
22 | pointers instead of actual items. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
23 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
24 | If you pass zero for the number of `buckets`, or use `cxHashMapSimple()`, |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
25 | the map is initialized with a default of 16 buckets, otherwise the specified number of buckets is allocated. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
26 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
27 | > If you want to lazy-initialize maps, you can use the global `cxEmptyMap` symbol as a placeholder instead of using a `NULL`-pointer. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
28 | > While you *must not* insert elements into that map, you can safely access this map or create iterators. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
29 | > This allows you to write clean code without checking for `NULL`-pointer everywhere. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
30 | > You still need to make sure that the placeholder is replaced with an actual map before inserting elements. |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
31 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
32 | ## Overview |
1141 | 33 | |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
34 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
35 | TODO: write example |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
36 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
37 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
38 | ## Insert |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
39 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
41 | #include <cx/map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
42 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
43 | int cxMapPut(CxMap *map, KeyType key, void *value); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
44 | ``` |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
45 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
46 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
47 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
48 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
49 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
50 | ## Access |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
51 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
52 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
53 | #include <cx/map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
54 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
55 | void *cxMapGet(CxMap *map, KeyType key); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
56 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
57 | size_t cxMapSize(const CxMap *map); |
1141 | 58 | ``` |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
59 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
60 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
61 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
62 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
63 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
64 | ## Remove |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
65 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
66 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
67 | #include <cx/map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
68 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
69 | int cxMapRemove(CxMap *map, KeyType key); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
70 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
71 | int cxMapRemoveAndGet(CxMap *map, KeyType key, void* targetbuf); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
72 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
73 | void cxMapClear(CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
74 | ``` |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
75 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
76 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
77 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
78 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
79 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
80 | ## Iterators |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
81 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
82 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
83 | #include <cx/map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
84 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
85 | CxMapIterator cxMapIteratorValues(const CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
86 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
87 | CxMapIterator cxMapIteratorKeys(const CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
88 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
89 | CxMapIterator cxMapIteratorValues(const CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
90 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
91 | CxMapIterator cxMapMutIteratorValues(CxMap *map); |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
92 | |
1243
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
93 | CxMapIterator cxMapMutIteratorKeys(CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
94 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
95 | CxMapIterator cxMapMutIteratorValues(CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
96 | ``` |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
97 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
98 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
99 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
100 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
101 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
102 | ## Dispose |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
103 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
104 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
105 | #include <cx/map.h> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
106 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
107 | void cxMapFree(CxMap *map); |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
108 | ``` |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
109 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
110 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
112 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
113 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
114 | ## Implement own Map Structures |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
115 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
116 | ```C |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
117 | typedef struct cx_map_entry_s { |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
118 | const CxHashKey *key; |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | void *value; |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
120 | } CxMapEntry; |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
121 | ``` |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
122 | |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
123 | <warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
124 | TODO: document |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
125 | </warning> |
13e15cd529ae
structur for map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
126 | |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
127 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
128 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
129 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
130 | <a href="https://ucx.sourceforge.io/api/map_8h.html">map.h</a> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
131 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
132 | </seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
133 |