Blame


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