src/cx/kv_list.h

changeset 1426
3a89b31f0724
parent 1424
563033aa998c
equal deleted inserted replaced
1425:83284b289430 1426:3a89b31f0724
64 * @param elem_size the size of each element in bytes 64 * @param elem_size the size of each element in bytes
65 * @return the created list 65 * @return the created list
66 * @see cxKvListAsMap() 66 * @see cxKvListAsMap()
67 * @see cxKvListAsList() 67 * @see cxKvListAsList()
68 */ 68 */
69 cx_attr_nodiscard 69 cx_attr_nodiscard cx_attr_malloc cx_attr_dealloc(cxListFree, 1)
70 cx_attr_malloc 70 CX_EXPORT CxList *cxKvListCreate(const CxAllocator *allocator,
71 cx_attr_dealloc(cxListFree, 1) 71 cx_compare_func comparator, size_t elem_size);
72 cx_attr_export
73 CxList *cxKvListCreate(
74 const CxAllocator *allocator,
75 cx_compare_func comparator,
76 size_t elem_size
77 );
78 72
79 /** 73 /**
80 * Allocates a linked list with a lookup-map for storing elements with @p elem_size bytes each. 74 * Allocates a linked list with a lookup-map for storing elements with @p elem_size bytes each.
81 * 75 *
82 * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of 76 * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of
95 * @param elem_size the size of each element in bytes 89 * @param elem_size the size of each element in bytes
96 * @return the created list wrapped into the CxMap interface 90 * @return the created list wrapped into the CxMap interface
97 * @see cxKvListAsMap() 91 * @see cxKvListAsMap()
98 * @see cxKvListAsList() 92 * @see cxKvListAsList()
99 */ 93 */
100 cx_attr_nodiscard 94 cx_attr_nodiscard cx_attr_malloc cx_attr_dealloc(cxMapFree, 1)
101 cx_attr_malloc 95 CX_EXPORT CxMap *cxKvListCreateAsMap(const CxAllocator *allocator,
102 cx_attr_dealloc(cxMapFree, 1) 96 cx_compare_func comparator, size_t elem_size);
103 cx_attr_export
104 CxMap *cxKvListCreateAsMap(
105 const CxAllocator *allocator,
106 cx_compare_func comparator,
107 size_t elem_size
108 );
109 97
110 /** 98 /**
111 * Allocates a linked list with a lookup-map for storing elements with @p elem_size bytes each. 99 * Allocates a linked list with a lookup-map for storing elements with @p elem_size bytes each.
112 * 100 *
113 * The list will use cxDefaultAllocator and no comparator function. If you want 101 * The list will use cxDefaultAllocator and no comparator function. If you want
156 * Converts a map pointer belonging to a key-value-List back to the original list pointer. 144 * Converts a map pointer belonging to a key-value-List back to the original list pointer.
157 * 145 *
158 * @param map a map pointer that was returned by a call to cxKvListAsMap() 146 * @param map a map pointer that was returned by a call to cxKvListAsMap()
159 * @return the original list pointer 147 * @return the original list pointer
160 */ 148 */
161 cx_attr_nodiscard 149 cx_attr_nodiscard cx_attr_nonnull cx_attr_returns_nonnull
162 cx_attr_nonnull 150 CX_EXPORT CxList *cxKvListAsList(CxMap *map);
163 cx_attr_returns_nonnull
164 cx_attr_export
165 CxList *cxKvListAsList(CxMap *map);
166 151
167 /** 152 /**
168 * Converts a map pointer belonging to a key-value-List back to the original list pointer. 153 * Converts a map pointer belonging to a key-value-List back to the original list pointer.
169 * 154 *
170 * @param list a list created by cxKvListCreate() or cxKvListCreateSimple() 155 * @param list a list created by cxKvListCreate() or cxKvListCreateSimple()
171 * @return a map pointer that lets you use the list as if it was a map 156 * @return a map pointer that lets you use the list as if it was a map
172 */ 157 */
173 cx_attr_nodiscard 158 cx_attr_nodiscard cx_attr_nonnull cx_attr_returns_nonnull
174 cx_attr_nonnull 159 CX_EXPORT CxMap *cxKvListAsMap(CxList *list);
175 cx_attr_returns_nonnull
176 cx_attr_export
177 CxMap *cxKvListAsMap(CxList *list);
178 160
179 /** 161 /**
180 * Sets or updates the key of a list item. 162 * Sets or updates the key of a list item.
181 * 163 *
182 * This is, for example, useful when you have inserted an element using the CxList interface, 164 * This is, for example, useful when you have inserted an element using the CxList interface,
188 * @retval zero success 170 * @retval zero success
189 * @retval non-zero memory allocation failure or the index is out of bounds 171 * @retval non-zero memory allocation failure or the index is out of bounds
190 * @see cxKvListSetKey() 172 * @see cxKvListSetKey()
191 */ 173 */
192 cx_attr_nonnull 174 cx_attr_nonnull
193 cx_attr_export 175 CX_EXPORT int cx_kv_list_set_key(CxList *list, size_t index, CxHashKey key);
194 int cx_kv_list_set_key(CxList *list, size_t index, CxHashKey key);
195 176
196 /** 177 /**
197 * Inserts an item into the list at the specified index and associates it with the specified key. 178 * Inserts an item into the list at the specified index and associates it with the specified key.
198 * 179 *
199 * @param list the list 180 * @param list the list
203 * @retval zero success 184 * @retval zero success
204 * @retval non-zero memory allocation failure or the index is out of bounds 185 * @retval non-zero memory allocation failure or the index is out of bounds
205 * @see cxKvListInsert() 186 * @see cxKvListInsert()
206 */ 187 */
207 cx_attr_nonnull 188 cx_attr_nonnull
208 cx_attr_export 189 CX_EXPORT int cx_kv_list_insert(CxList *list, size_t index, CxHashKey key, void *value);
209 int cx_kv_list_insert(CxList *list, size_t index, CxHashKey key, void *value);
210 190
211 /** 191 /**
212 * Sets or updates the key of a list item. 192 * Sets or updates the key of a list item.
213 * 193 *
214 * This is, for example, useful when you have inserted an element using the CxList interface, 194 * This is, for example, useful when you have inserted an element using the CxList interface,
248 * @param index the index of the element in the list 228 * @param index the index of the element in the list
249 * @retval zero success 229 * @retval zero success
250 * @retval non-zero the index is out of bounds 230 * @retval non-zero the index is out of bounds
251 */ 231 */
252 cx_attr_nonnull 232 cx_attr_nonnull
253 cx_attr_export 233 CX_EXPORT int cxKvListRemoveKey(CxList *list, size_t index);
254 int cxKvListRemoveKey(CxList *list, size_t index);
255 234
256 /** 235 /**
257 * Returns the key of a list item. 236 * Returns the key of a list item.
258 * 237 *
259 * @param list the list 238 * @param list the list
260 * @param index the index of the element in the list 239 * @param index the index of the element in the list
261 * @return a pointer to the key or @c NULL when the index is out of bounds or the item does not have a key 240 * @return a pointer to the key or @c NULL when the index is out of bounds or the item does not have a key
262 */ 241 */
263 cx_attr_nonnull 242 cx_attr_nonnull
264 cx_attr_export 243 CX_EXPORT const CxHashKey *cxKvListGetKey(CxList *list, size_t index);
265 const CxHashKey *cxKvListGetKey(CxList *list, size_t index);
266 244
267 /** 245 /**
268 * Adds an item into the list and associates it with the specified key. 246 * Adds an item into the list and associates it with the specified key.
269 * 247 *
270 * @param list (@c CxList*) the list 248 * @param list (@c CxList*) the list

mercurial