array.c (795B)
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <signal.h> 6 #include "array.h" 7 8 array * 9 newarray(int cap, int size) { 10 cap = (!cap) ? 1 : cap; 11 array *a = malloc(sizeof(array)); 12 a->arr = malloc(cap * size); 13 a->cap = cap * size; 14 a->len = 0; 15 a->size = size; 16 return a; 17 } 18 19 void * 20 indexarray(array *a, int index) { 21 if (a->cap < index * a->size) 22 kill(0, SIGSEGV); 23 return a->arr + (index * a->size); 24 } 25 26 void 27 resizearray(array *a, int new) { 28 if (a->cap > new) 29 kill(0, SIGSEGV); 30 a->cap = new; 31 a->arr = realloc(a->arr, new); 32 } 33 34 void 35 appendarray(array *a, void *item) { 36 while (a->len + a->size > a->cap) 37 resizearray(a, a->cap * 2); 38 memcpy(a->arr + a->len, item, a->size); 39 } 40 41 void 42 destroyarray(array *a) { 43 if (a->arr) 44 free(a->arr); 45 free(a); 46 }