src/cx/map.h

changeset 1111
78eeeb950883
parent 1109
89ec23988b88
child 1114
ad5eeb256242
equal deleted inserted replaced
1110:a0e9be7ed131 1111:78eeeb950883
158 * for which you do not want to reserve memory right from the beginning. 158 * for which you do not want to reserve memory right from the beginning.
159 */ 159 */
160 extern CxMap *const cxEmptyMap; 160 extern CxMap *const cxEmptyMap;
161 161
162 /** 162 /**
163 * Advises the map to store copies of the objects (default mode of operation).
164 *
165 * Retrieving objects from this map will yield pointers to the copies stored
166 * within this list.
167 *
168 * @param map the map
169 * @see cxMapStorePointers()
170 */
171 cx_attr_nonnull
172 static inline void cxMapStoreObjects(CxMap *map) {
173 map->collection.store_pointer = false;
174 }
175
176 /**
177 * Advises the map to only store pointers to the objects.
178 *
179 * Retrieving objects from this list will yield the original pointers stored.
180 *
181 * @note This function forcibly sets the element size to the size of a pointer.
182 * Invoking this function on a non-empty map that already stores copies of
183 * objects is undefined.
184 *
185 * @param map the map
186 * @see cxMapStoreObjects()
187 */
188 cx_attr_nonnull
189 static inline void cxMapStorePointers(CxMap *map) {
190 map->collection.store_pointer = true;
191 map->collection.elem_size = sizeof(void *);
192 }
193
194 /**
195 * Returns true, if this map is storing pointers instead of the actual data.
196 *
197 * @param map
198 * @return true, if this map is storing pointers
199 * @see cxMapStorePointers()
200 */
201 cx_attr_nonnull
202 static inline bool cxMapIsStoringPointers(const CxMap *map) {
203 return map->collection.store_pointer;
204 }
205
206 /**
207 * Deallocates the memory of the specified map. 163 * Deallocates the memory of the specified map.
208 * 164 *
209 * Also calls the content destructor functions for each element, if specified. 165 * Also calls the content destructor functions for each element, if specified.
210 * 166 *
211 * @param map the map to be freed 167 * @param map the map to be freed
759 * @param map (@c CxMap*) the map 715 * @param map (@c CxMap*) the map
760 * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key 716 * @param key (@c CxHashKey, @c char*, @c cxstring, or @c cxmutstr) the key
761 * @param targetbuf (@c void*) the buffer where the element shall be copied to 717 * @param targetbuf (@c void*) the buffer where the element shall be copied to
762 * @retval zero success 718 * @retval zero success
763 * @retval non-zero the key was not found 719 * @retval non-zero the key was not found
764 * 720 *
765 * @see cxMapStorePointers()
766 * @see cxMapRemove() 721 * @see cxMapRemove()
767 */ 722 */
768 #define cxMapRemoveAndGet(map, key, targetbuf) _Generic((key), \ 723 #define cxMapRemoveAndGet(map, key, targetbuf) _Generic((key), \
769 CxHashKey: cx_map_remove_and_get, \ 724 CxHashKey: cx_map_remove_and_get, \
770 cxstring: cx_map_remove_and_get_cxstr, \ 725 cxstring: cx_map_remove_and_get_cxstr, \

mercurial