Blob


1 #include "sam.h"
3 /*
4 * Check that list has room for one more element.
5 */
6 void
7 growlist(List *l)
8 {
9 if(l->listptr==0 || l->nalloc==0){
10 l->nalloc = INCR;
11 l->listptr = emalloc(INCR*sizeof(long));
12 l->nused = 0;
13 }else if(l->nused == l->nalloc){
14 l->listptr = erealloc(l->listptr, (l->nalloc+INCR)*sizeof(long));
15 memset((void*)(l->longptr+l->nalloc), 0, INCR*sizeof(long));
16 l->nalloc += INCR;
17 }
18 }
20 /*
21 * Remove the ith element from the list
22 */
23 void
24 dellist(List *l, int i)
25 {
26 memmove(&l->longptr[i], &l->longptr[i+1], (l->nused-(i+1))*sizeof(long));
27 l->nused--;
28 }
30 /*
31 * Add a new element, whose position is i, to the list
32 */
33 void
34 inslist(List *l, int i, long val)
35 {
36 growlist(l);
37 memmove(&l->longptr[i+1], &l->longptr[i], (l->nused-i)*sizeof(long));
38 l->longptr[i] = val;
39 l->nused++;
40 }
42 void
43 listfree(List *l)
44 {
45 free(l->listptr);
46 free(l);
47 }