1 #ifndef lcthw_List_h 2 #define lcthw_List_h 3 4 #include <stdlib.h> 5 6 struct ListNode; 7 8 typedef struct ListNode { 9 struct ListNode *next; 10 struct ListNode *prev; 11 void *value; 12 } ListNode; 13 14 typedef struct List { 15 int count; 16 ListNode *first; 17 ListNode *last; 18 } List; 19 20 List *List_create(); 21 void List_destroy(List *list); 22 void List_clear(List *list); 23 void List_clear_destroy(List *list); 24 25 #define List_count(A) ((A)->count) 26 #define List_first(A) ((A)->first != NULL ? (A)->first->value : NULL) 27 #define List_last(A) ((A)->last != NULL ? (A)->last->value : NULL) 28 29 void List_push(List *list, void *value); 30 void *List_pop(List *list); 31 32 void List_unshift(List *list, void *value); 33 void *List_shift(List *list); 34 35 void *List_remove(List *list, ListNode *node); 36 37 #define LIST_FOREACH(L, S, M, V) ListNode *_node = NULL;\ 38 ListNode *V = NULL;\ 39 for(V = _node = L->S; _node != NULL; V = _node = _node->M) 40 41 #endif 42