#include "sam.h" /* * Check that list has room for one more element. */ void growlist(List *l) { if(l->listptr==0 || l->nalloc==0){ l->nalloc = INCR; l->listptr = emalloc(INCR*sizeof(long)); l->nused = 0; }else if(l->nused == l->nalloc){ l->listptr = erealloc(l->listptr, (l->nalloc+INCR)*sizeof(long)); memset((void*)(l->longptr+l->nalloc), 0, INCR*sizeof(long)); l->nalloc += INCR; } } /* * Remove the ith element from the list */ void dellist(List *l, int i) { memmove(&l->longptr[i], &l->longptr[i+1], (l->nused-(i+1))*sizeof(long)); l->nused--; } /* * Add a new element, whose position is i, to the list */ void inslist(List *l, int i, long val) { growlist(l); memmove(&l->longptr[i+1], &l->longptr[i], (l->nused-i)*sizeof(long)); l->longptr[i] = val; l->nused++; } void listfree(List *l) { free(l->listptr); free(l); }