48 lines
858 B
C
48 lines
858 B
C
|
|
#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);
|
||
|
|
}
|