/* list.h: Declarations for C-- lists. */ /* The header file ordering breaks down here; we need to run this file * after data.h has completed, not just after the typedefs are done. * Thus the ugly conditionals. */ #ifndef DID_LIST_TYPEDEF typedef struct list List; #define DID_LIST_TYPEDEF #endif #include "data.h" #ifdef DATA_H_DONE #ifndef LIST_H #define LIST_H struct list { int start; int len; int size; int refs; Data el[1]; }; List *list_new(int len); List *list_dup(List *list); int list_length(List *list); Data *list_first(List *list); Data *list_next(List *list, Data *d); Data *list_last(List *list); Data *list_prev(List *list, Data *d); Data *list_elem(List *list, int i); Data *list_empty_spaces(List *list, int spaces); int list_search(List *list, Data *data); int list_cmp(List *l1, List *l2); List *list_insert(List *list, int pos, Data *elem); List *list_add(List *list, Data *elem); List *list_replace(List *list, int pos, Data *elem); List *list_delete(List *list, int pos); List *list_delete_element(List *list, Data *elem); List *list_append(List *list1, List *list2); List *list_reverse(List *list); List *list_setadd(List *list, Data *elem); List *list_setremove(List *list, Data *elem); List *list_union(List *list1, List *list2); List *list_sublist(List *list, int start, int len); void list_discard(List *list); #endif #endif