docs/Writerside/topics/map.h.md

Tue, 11 Mar 2025 12:05:01 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 11 Mar 2025 12:05:01 +0100
changeset 1243
13e15cd529ae
parent 1190
a7b913d5d589
permissions
-rw-r--r--

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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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

mercurial