void arr_add(Array* arr, void* e, JzonAllocator* allocator) { if (arr->size == arr->capacity) arr_grow(arr, allocator); arr->arr[arr->size] = e; ++arr->size; }
void arr_insert(Array* arr, void* e, unsigned index, JzonAllocator* allocator) { if (arr->size == arr->capacity) arr_grow(arr, allocator); memmove(arr->arr + index + 1, arr->arr + index, (arr->size - index) * sizeof(void**)); arr->arr[index] = e; ++arr->size; }
/* arr_insert • inserting nb elements before the nth one */ int arr_insert(struct array *arr, int nb, int n) { char *src, *dst; size_t len; if (!arr || nb <= 0 || n < 0 || !arr_grow(arr, arr->size + nb)) return 0; if (n < arr->size) { src = arr->base; src += n * arr->unit; dst = src + nb * arr->unit; len = (arr->size - n) * arr->unit; memmove(dst, src, len); } arr->size += nb; return 1; }
/* arr_newitem • returns the index of a new element appended to the array */ int arr_newitem(struct array *arr) { if (!arr_grow(arr, arr->size + 1)) return -1; arr->size += 1; return arr->size - 1; }