diff --git a/array.c b/array.c index d70cff9..b31ba56 100644 --- a/array.c +++ b/array.c @@ -116,6 +116,21 @@ ARR_AppendElement(ARR_Instance array, void *element) memcpy(e, element, array->elem_size); } +void +ARR_RemoveElement(ARR_Instance array, unsigned int index) +{ + void *e, *l; + + e = ARR_GetElement(array, index); + l = ARR_GetElement(array, array->used - 1); + + if (e < l) + memmove(e, (char *)e + array->elem_size, (char *)l - (char *)e); + array->used--; + + realloc_array(array, array->used); +} + void ARR_SetSize(ARR_Instance array, unsigned int size) { diff --git a/array.h b/array.h index c812e84..f4fbddb 100644 --- a/array.h +++ b/array.h @@ -47,6 +47,9 @@ extern void *ARR_GetElements(ARR_Instance array); /* Add a new element to the end of the array */ extern void ARR_AppendElement(ARR_Instance array, void *element); +/* Remove element with given index */ +extern void ARR_RemoveElement(ARR_Instance array, unsigned int index); + /* Set the size of the array */ extern void ARR_SetSize(ARR_Instance array, unsigned int size);