6 Array array_create(size_t membsiz)
17 static void array_realloc(Array *array)
19 if (array->siz > array->cap) {
20 array->cap = array->siz + ARRAY_REALLOC_EXTRA;
21 array->ptr = realloc(array->ptr, array->cap * array->membsiz);
25 static void array_alloc(Array *array, size_t siz)
31 void array_insert(Array *array, void *elem, size_t idx)
33 size_t oldsiz = array->siz;
34 array_alloc(array, 1);
36 char *iptr = (char *) array->ptr + idx * array->membsiz;
37 memmove(iptr + array->membsiz, iptr, (oldsiz - idx) * array->membsiz);
38 memcpy(iptr, elem, array->membsiz);
41 void array_append(Array *array, void *elem)
43 size_t oldsiz = array->siz;
44 array_alloc(array, 1);
46 memcpy((char *) array->ptr + oldsiz * array->membsiz, elem, array->membsiz);
49 void array_copy(Array *array, void **ptr, size_t *count)
52 size_t size = array->siz * array->membsiz;
54 memcpy(*ptr, array->ptr, size);