| |
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 |