spl

a Simple Programming Language
Log | Files | Refs

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 }