24 if (old_size != new_size) {
25 ptr =
realloc(ptr, element_size * new_size);
26 if (old_size < new_size) {
27 memset((
char*)ptr + element_size * old_size, 0, element_size * (new_size - old_size));
36 if ((*size < new_size) || force) {
37 if (force && free_func) {
39 for (i = new_size; i < *
n; ++
i) {
44 *ptr = (
void*)
realloc(*ptr,
sizeof(
void*) * new_size);
55 assert(ptr && n && size && element);
56 i = ((index >= 0) && (index < *n)) ? index : *n;
58 int new_size = 2 * (*size);
72 memmove(&(*ptr)[i+1], &(*ptr)[i],
sizeof(
void*) * (*n - i));
81 if ((index >= 0) && (index < *n)) {
83 free_func((*ptr)[index]);
85 memmove(&(*ptr)[index], &(*ptr)[index+1],
sizeof(
void*) * (*n - index - 1));
void(* Lib3dsFreeFunc)(void *ptr)
void * lib3ds_util_realloc_array(void *ptr, int old_size, int new_size, int element_size)
void lib3ds_util_reserve_array(void ***ptr, int *n, int *size, int new_size, int force, Lib3dsFreeFunc free_func)
void lib3ds_util_remove_array(void ***ptr, int *n, int index, Lib3dsFreeFunc free_func)
void lib3ds_util_insert_array(void ***ptr, int *n, int *size, void *element, int index)