236
236
#define array_append_space(array) \
237
237
ARRAY_TYPE_CAST_MODIFIABLE(array)array_append_space_i(&(array)->arr)
238
#define array_append_zero(array) \
239
(void)array_append_space_i(&(array)->arr)
239
241
void *array_insert_space_i(struct array *array, unsigned int idx);
240
242
#define array_insert_space(array, idx) \
262
264
array_reverse_i(&(array)->arr)
264
266
void array_sort_i(struct array *array, int (*cmp)(const void *, const void *));
265
#ifdef CONTEXT_TYPE_SAFETY
266
#define array_sort(array, cmp) \
267
({(void)(1 ? 0 : cmp(ARRAY_TYPE_CAST_CONST(array)NULL, \
268
ARRAY_TYPE_CAST_CONST(array)NULL)); \
269
array_sort_i(&(array)->arr, \
270
(int (*)(const void *, const void *))cmp); })
272
#define array_sort(array, cmp) \
273
array_sort_i(&(array)->arr, (int (*)(const void *, const void *))cmp)
267
#define array_sort(array, cmp) \
268
array_sort_i(&(array)->arr + \
269
CALLBACK_TYPECHECK(cmp, int (*)(typeof(*(array)->v), \
270
typeof(*(array)->v))), \
271
(int (*)(const void *, const void *))cmp)
276
273
void *array_bsearch_i(struct array *array, const void *key,
277
274
int (*cmp)(const void *, const void *));
278
#ifdef CONTEXT_TYPE_SAFETY
279
#define array_bsearch(array, key, cmp) \
280
ARRAY_TYPE_CAST_MODIFIABLE(array) \
281
({(void)(1 ? 0 : cmp(key, ARRAY_TYPE_CAST_CONST(array)NULL)); \
282
array_bsearch_i(&(array)->arr, (const void *)key, \
283
(int (*)(const void *, const void *))cmp); })
285
#define array_bsearch(array, key, cmp) \
286
array_bsearch_i(&(array)->arr, (const void *)key, \
287
(int (*)(const void *, const void *))cmp)
275
#define array_bsearch(array, key, cmp) \
276
ARRAY_TYPE_CAST_MODIFIABLE(array)array_bsearch_i(&(array)->arr + \
277
CALLBACK_TYPECHECK(cmp, int (*)(typeof(const typeof(*key) *), \
278
typeof(*(array)->v))), \
279
(const void *)key, (int (*)(const void *, const void *))cmp)