src/cx/map.h

changeset 658
56c62780582e
parent 630
ac5e7f789048
child 659
4a06fd63909a
equal deleted inserted replaced
657:3eeadf666d6b 658:56c62780582e
61 cx_map_class *cl; 61 cx_map_class *cl;
62 /** An allocator that is used for the map elements. */ 62 /** An allocator that is used for the map elements. */
63 CxAllocator *allocator; 63 CxAllocator *allocator;
64 /** The number of elements currently stored. */ 64 /** The number of elements currently stored. */
65 size_t size; 65 size_t size;
66 // TODO: elemsize + a flag if values shall be copied to the map 66 /**
67 * The size of an element.
68 */
69 size_t itemsize;
70 /**
71 * True, if this map shall store pointers instead
72 * of copies of objects.
73 */
74 bool store_pointers;
67 }; 75 };
68 76
69 /** 77 /**
70 * The class definition for arbitrary maps. 78 * The class definition for arbitrary maps.
71 */ 79 */
159 * A pointer to the value. 167 * A pointer to the value.
160 */ 168 */
161 void *value; 169 void *value;
162 }; 170 };
163 171
172 /**
173 * Advises the map to store copies of the objects (default mode of operation).
174 *
175 * Retrieving objects from this map will yield pointers to the copies stored
176 * within this list.
177 *
178 * @param map the map
179 * @see cxMapStorePointers()
180 */
181 __attribute__((__nonnull__))
182 static inline void cxMapStoreObjects(CxMap *map) {
183 map->store_pointers = false;
184 }
185
186 /**
187 * Advises the map to only store pointers to the objects.
188 *
189 * Retrieving objects from this list will yield the original pointers stored.
190 *
191 * @note This function forcibly sets the element size to the size of a pointer.
192 * Invoking this function on a non-empty map that already stores copies of
193 * objects is undefined.
194 *
195 * @param map the map
196 * @see cxMapStoreObjects()
197 */
198 __attribute__((__nonnull__))
199 static inline void cxMapStorePointers(CxMap *map) {
200 map->store_pointers = true;
201 map->itemsize = sizeof(void *);
202 }
203
164 204
165 /** 205 /**
166 * Deallocates the memory of the specified map. 206 * Deallocates the memory of the specified map.
167 * 207 *
168 * @param map the map to be destroyed 208 * @param map the map to be destroyed
219 /** 259 /**
220 * Removes a key/value-pair from the map by using the key. 260 * Removes a key/value-pair from the map by using the key.
221 * 261 *
222 * @param map the map 262 * @param map the map
223 * @param key the key 263 * @param key the key
224 * @return the removed value 264 * @return if this map is storing pointers, the removed value, \c NULL otherwise
265 * @see cxMapStorePointers()
225 */ 266 */
226 __attribute__((__nonnull__, __warn_unused_result__)) 267 __attribute__((__nonnull__, __warn_unused_result__))
227 static inline void *cxMapRemove( 268 static inline void *cxMapRemove(
228 CxMap *map, 269 CxMap *map,
229 CxHashKey key 270 CxHashKey key

mercurial