/* list.h Pedro Flynn - pflynn@microsoftsucks.org */ #ifndef LIST_H #define LIST_H #include typedef struct ListElmt_ { void* data; struct ListElmt_* next; } ListElmt; typedef struct List_ { int size; int (*match)(const void*,const void*); void (*destroy)(void*); ListElmt *head; ListElmt *tail; } List; List* list_create(void (*destroy)(void*)); void list_destroy(List* list); ListElmt* list_ins_next(List* list,ListElmt* element,const void* data); int list_rem_next(List* list,ListElmt* element,void** data); #define LIST_SIZE(list) ((list)->size) #define LIST_HEAD(list) ((list)->head) #define LIST_TAIL(list) ((list)->tail) #define LIST_DATA(element) ((element)->data) #define LIST_NEXT(element) ((element)->next) #endif