Removed a free that shouldn't have been in myarray_remove_index
[myarray.git] / myarray.c
blob6b2da318c2a33695f62f887bb12e7bd1d7c1fc4c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include "myarray.h"
6 MArray myarray_new(int size, int incr, int elsize) {
7 MArray myarray = malloc(sizeof(struct myarray));
8 myarray->elements = calloc(size, sizeof(void *));
9 myarray->len = 0;
10 myarray->maxlen = size;
11 myarray->incr = incr;
12 myarray->elsize = elsize;
14 return myarray;
17 static void myarray_enlarge(MArray array) {
18 array->maxlen+= array->incr;
19 array->elements = realloc(array->elements, array->maxlen*sizeof(void *));
22 void _myarray_insert(MArray array, void *element, int index) {
23 if (index < 0 || index > array->len) {
24 fprintf(stderr, "Array index out of bounds %s:%d. Index: %d. Array size: %d\n", __FILE__, __LINE__, index, array->len);
25 exit(EXIT_FAILURE);
27 if (array->len == array->maxlen) {
28 myarray_enlarge(array);
30 memmove(&array->elements[index+1], &array->elements[index], (array->len - index)*sizeof(void *));
31 array->elements[index] = element;
32 array->len += 1;
35 void myarray_remove_index(MArray array, int index) {
36 memmove(&array->elements[index], &array->elements[index+1], (array->len - index - 1)*sizeof(void *));
37 array->len--;
40 void myarray_free(MArray array) {
41 int i;
42 for (i = 0; i < array->len; i++) {
43 free(myarray_get(array, void *, i));
45 free(array->elements);
46 free(array);
49 void myarray_reset(MArray array) {
50 array->len = 0;