5 Array array_create(size_t membsiz)
16 static void array_realloc(Array *array)
18 if (array->siz > array->cap) {
19 array->cap = array->siz + DRAGONTYPE_ARRAY_REALLOC_EXTRA;
20 array->ptr = realloc(array->ptr, array->cap * array->membsiz);
24 static void array_alloc(Array *array, size_t siz)
30 void array_insert(Array *array, void *elem, size_t idx)
32 size_t oldsiz = array->siz;
33 array_alloc(array, 1);
35 char *iptr = (char *) array->ptr + idx * array->membsiz;
36 memmove(iptr + array->membsiz, iptr, (oldsiz - idx) * array->membsiz);
37 memcpy(iptr, elem, array->membsiz);
40 void array_append(Array *array, void *elem)
42 size_t oldsiz = array->siz;
43 array_alloc(array, 1);
45 memcpy((char *) array->ptr + oldsiz * array->membsiz, elem, array->membsiz);
48 void array_copy(Array *array, void **ptr, size_t *count)
51 size_t size = array->siz * array->membsiz;
53 memcpy(*ptr, array->ptr, size);