| 121 * cx_array_initialize(arr1, 500); // error: maximum for uint8_t is 255 |
121 * cx_array_initialize(arr1, 500); // error: maximum for uint8_t is 255 |
| 122 * cx_array_initialize(arr2, 500); // OK |
122 * cx_array_initialize(arr2, 500); // OK |
| 123 * @endcode |
123 * @endcode |
| 124 * |
124 * |
| 125 * |
125 * |
| 126 * The memory for the array is allocated with stdlib malloc(). |
126 * The memory for the array is allocated with the cxDefaultAllocator. |
| |
127 * |
| 127 * @param array the name of the array |
128 * @param array the name of the array |
| 128 * @param capacity the initial capacity |
129 * @param capacity the initial capacity |
| 129 * @see cx_array_initialize_a() |
130 * @see cx_array_initialize_a() |
| 130 * @see CX_ARRAY_DECLARE_SIZED() |
131 * @see CX_ARRAY_DECLARE_SIZED() |
| 131 * @see CX_ARRAY_DECLARE() |
132 * @see CX_ARRAY_DECLARE() |
| 132 */ |
133 */ |
| 133 #define cx_array_initialize(array, capacity) \ |
134 #define cx_array_initialize(array, capacity) \ |
| 134 array##_capacity = capacity; \ |
135 array##_capacity = capacity; \ |
| 135 array##_size = 0; \ |
136 array##_size = 0; \ |
| 136 array = malloc(sizeof(array[0]) * capacity) |
137 array = cxMalloc(cxDefaultAllocator, sizeof(array[0]) * capacity) |
| 137 |
138 |
| 138 /** |
139 /** |
| 139 * Initializes an array with the given capacity using the specified allocator. |
140 * Initializes an array with the given capacity using the specified allocator. |
| 140 * |
141 * |
| 141 * @par Example |
142 * @par Example |
| 147 * cx_array_initialize_a(al, myarray, 128); |
148 * cx_array_initialize_a(al, myarray, 128); |
| 148 * // ... |
149 * // ... |
| 149 * cxFree(al, myarray); // don't forget to free with same allocator |
150 * cxFree(al, myarray); // don't forget to free with same allocator |
| 150 * @endcode |
151 * @endcode |
| 151 * |
152 * |
| 152 * The memory for the array is allocated with stdlib malloc(). |
|
| 153 * @param allocator (@c CxAllocator*) the allocator |
153 * @param allocator (@c CxAllocator*) the allocator |
| 154 * @param array the name of the array |
154 * @param array the name of the array |
| 155 * @param capacity the initial capacity |
155 * @param capacity the initial capacity |
| 156 * @see cx_array_initialize() |
156 * @see cx_array_initialize() |
| 157 * @see CX_ARRAY_DECLARE_SIZED() |
157 * @see CX_ARRAY_DECLARE_SIZED() |
| 215 * Typedef for the array reallocator struct. |
215 * Typedef for the array reallocator struct. |
| 216 */ |
216 */ |
| 217 typedef struct cx_array_reallocator_s CxArrayReallocator; |
217 typedef struct cx_array_reallocator_s CxArrayReallocator; |
| 218 |
218 |
| 219 /** |
219 /** |
| 220 * A default stdlib-based array reallocator. |
220 * A default array reallocator that is based on the cxDefaultAllocator. |
| 221 */ |
221 */ |
| 222 cx_attr_export |
222 cx_attr_export |
| 223 extern CxArrayReallocator *cx_array_default_reallocator; |
223 extern CxArrayReallocator *cx_array_default_reallocator; |
| 224 |
224 |
| 225 /** |
225 /** |
| 226 * Creates a new array reallocator. |
226 * Creates a new array reallocator. |
| 227 * |
227 * |
| 228 * When @p allocator is @c NULL, the stdlib default allocator will be used. |
228 * When @p allocator is @c NULL, the cxDefaultAllocator will be used. |
| 229 * |
229 * |
| 230 * When @p stackmem is not @c NULL, the reallocator is supposed to be used |
230 * When @p stackmem is not @c NULL, the reallocator is supposed to be used |
| 231 * @em only for the specific array that is initially located at @p stackmem. |
231 * @em only for the specific array that is initially located at @p stackmem. |
| 232 * When reallocation is needed, the reallocator checks, if the array is |
232 * When reallocation is needed, the reallocator checks, if the array is |
| 233 * still located at @p stackmem and copies the contents to the heap. |
233 * still located at @p stackmem and copies the contents to the heap. |
| 697 * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of |
697 * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of |
| 698 * copies of the added elements and the compare function will be automatically set |
698 * copies of the added elements and the compare function will be automatically set |
| 699 * to cx_cmp_ptr(), if none is given. |
699 * to cx_cmp_ptr(), if none is given. |
| 700 * |
700 * |
| 701 * @param allocator the allocator for allocating the list memory |
701 * @param allocator the allocator for allocating the list memory |
| 702 * (if @c NULL, a default stdlib allocator will be used) |
702 * (if @c NULL, the cxDefaultAllocator will be used) |
| 703 * @param comparator the comparator for the elements |
703 * @param comparator the comparator for the elements |
| 704 * (if @c NULL, and the list is not storing pointers, sort and find |
704 * (if @c NULL, and the list is not storing pointers, sort and find |
| 705 * functions will not work) |
705 * functions will not work) |
| 706 * @param elem_size the size of each element in bytes |
706 * @param elem_size the size of each element in bytes |
| 707 * @param initial_capacity the initial number of elements the array can store |
707 * @param initial_capacity the initial number of elements the array can store |