| 44 #endif |
44 #endif |
| 45 |
45 |
| 46 /** Internal structure for a key within a hash map. */ |
46 /** Internal structure for a key within a hash map. */ |
| 47 struct cx_hash_map_key_s { |
47 struct cx_hash_map_key_s { |
| 48 /** The key data. */ |
48 /** The key data. */ |
| 49 CxDataPtr data; |
49 unsigned char *data; |
| |
50 /** |
| |
51 * The key data length. |
| |
52 */ |
| |
53 size_t len; |
| 50 /** The hash value of the key data. */ |
54 /** The hash value of the key data. */ |
| 51 unsigned hash; |
55 unsigned hash; |
| 52 }; |
56 }; |
| 53 |
57 |
| 54 /** Internal structure for an element of a hash map. */ |
58 /** Internal structure for an element of a hash map. */ |
| 61 |
65 |
| 62 /** The corresponding key. */ |
66 /** The corresponding key. */ |
| 63 struct cx_hash_map_key_s key; |
67 struct cx_hash_map_key_s key; |
| 64 }; |
68 }; |
| 65 |
69 |
| |
70 /** |
| |
71 * Internal structure for a hash map. |
| |
72 */ |
| |
73 struct cx_hash_map_s { |
| |
74 /** |
| |
75 * Base structure for maps. |
| |
76 */ |
| |
77 struct cx_map_s base; |
| |
78 /** |
| |
79 * The buckets of this map, each containing a linked list of elements. |
| |
80 */ |
| |
81 struct cx_hash_map_element_s **buckets; |
| |
82 /** |
| |
83 * The number of buckets. |
| |
84 */ |
| |
85 size_t bucket_count; |
| |
86 }; |
| |
87 |
| 66 |
88 |
| 67 /** |
89 /** |
| 68 * Creates a new hash map with the specified size using a UcxAllocator. |
90 * Creates a new hash map with the specified number of buckets. |
| |
91 * |
| |
92 * If \p buckets is zero, an implementation defined default will be used. |
| |
93 * |
| |
94 * @note Iterators provided by this hash map implementation do provide the remove operation, because |
| |
95 * a remove never causes an immediate rehashing. The iterators are also position-aware in the sense |
| |
96 * that the index is initialized with zero and incremented when the iterator advances. |
| 69 * |
97 * |
| 70 * @param allocator the allocator to use |
98 * @param allocator the allocator to use |
| 71 * @param buckets the initial number of buckets in this hash map |
99 * @param buckets the initial number of buckets in this hash map |
| 72 * @return a pointer to the new hash map |
100 * @return a pointer to the new hash map |
| 73 */ |
101 */ |
| |
102 __attribute__((__nonnull__, __warn_unused_result__)) |
| 74 CxMap *cxHashMapCreate( |
103 CxMap *cxHashMapCreate( |
| 75 CxAllocator *allocator, |
104 CxAllocator *allocator, |
| 76 size_t buckets |
105 size_t buckets |
| 77 ); |
106 ); |
| 78 |
107 |