#include "dyn_arr.h" #include #include void *_da_create(size_t type_size, int init_cap) { init_cap = init_cap < DA_MIN_CAP ? DA_MIN_CAP : init_cap; int *arr = (int*)mem_alloc(type_size * init_cap + sizeof(int) * 2); arr[0] = 0; arr[1] = init_cap; return (void*)(arr + 2); } void *_da_append_slot(size_t type_size, void **arr) { int *cap = da_cap_ptr(*arr); int *len = da_len_ptr(*arr); (*len)++; if (*len > *cap) { *cap *= DA_GROW_RATE; void* base = da_base(*arr); base = mem_realloc(base, (type_size * *cap) + sizeof(int) * 2); assert(base != NULL); // Just to handle the case *arr = (void*)((int*)base + 2); len = da_len_ptr(*arr); } return (char*)*arr + ((*len - 1) * type_size); } void da_free(void *arr) { void *base = da_base(arr); mem_free(base); }