docs/Writerside/topics/map.h.md

changeset 1188
b0300de92b72
parent 1146
151c057faf7c
child 1190
a7b913d5d589
equal deleted inserted replaced
1187:0f70bb04f7ba 1188:b0300de92b72
1 # Map Interface
2
3 <warning>
4 Outdated - Rewrite!
5 </warning>
6
7 Similar to the list interface, the map interface provides a common API for implementing maps.
8 There are some minor subtle differences, though.
9
10 First, the `remove` method is not always a destructive removal.
11 Instead, the last argument is a Boolean that indicates whether the element shall be destroyed or returned.
12 ```c
13 void *(*remove)(CxMap *map, CxHashKey key, bool destroy);
14 ```
15 When you implement this method, you are either supposed to invoke the destructors and return `NULL`,
16 or just remove the element from the map and return it.
17
18 Secondly, the iterator method is a bit more complete. The signature is as follows:
19 ```c
20 CxIterator (*iterator)(const CxMap *map, enum cx_map_iterator_type type);
21 ```
22 There are three map iterator types: for values, for keys, for pairs.
23 Depending on the iterator type requested, you need to create an iterator with the correct methods that
24 return the requested thing.
25 There are no automatic checks to enforce this - it's completely up to you.
26 If you need inspiration on how to do that, check the hash map implementation that comes with UCX.
27
28 ## Undocumented Symbols (TODO)
29 ### cx_empty_map
30 ### cxEmptyMap
31 ### cxMapFree
32 ### cxMapMutIterator
33 ### cxMapMutIteratorKeys
34 ### cxMapMutIteratorValues

mercurial