1 #ifndef _LIST_H
2 #define _LIST_H
3 
4 #include "alloc.h"
5 
6 typedef struct _list {
7   void **array;
8   size_t allocated;
9   size_t length;
10 } list;
11 
12 #define START_LENGTH 10
13 
14 #define l_elem(lst, i)		((lst)->array[i])
15 #define l_length(lst)		((lst)->length)
16 #define l_allocated(lst)        ((lst)->allocated)
17 
18 
19 list *l_newsz(size_t sz);
20 #define l_new()		(l_newsz(10))
21 void l_free(list *lst);
22 
23 void l_reset(list *lst);
24 void l_makeroom(list *lst, size_t size);
25 
26 void l_append(list *lst, void *x);
27 void *l_deletelast(list *lst);
28 void l_insert(list *lst, size_t i, void *x);
29 void *l_delete(list *lst, size_t i);
30 void *l_fastdelete(list *lst, size_t i);
31 
32 #define l_intelem(lst,i) ((int) (lst)->array[i])
33 #define l_appendint(lst,a) l_append(lst,(void *)(a))
34 
35 void l_appendlist(list * lst1, list * lst2);
36 void l_copy(list * lst1, list * lst2);
37 list *l_new_copy(list * lst);
38 
39 #endif
40