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