1 #include <stdlib.h> // for malloc, free
2 #include <string.h> // for strcmp
3 #include "bits/wrappers.h"
6 #define ITER_REFS node = &list->fst; *node != NULL; node = &(*node)->nxt
8 void list_ini(List *list)
11 list->end = &list->fst;
14 WRAP_NODE_FUNCTIONS(List, list_)
16 void list_apd(List *list, void *dat)
18 list_nmk(list, list->end, dat);
21 ListNode **list_nfd(List *list, void *key, Comparator cmp)
26 if (cmp((*node)->dat, key) == 0)
32 void list_nmk(List *list, ListNode **node, void *dat)
34 *node = malloc(sizeof **node);
38 if (list->end == node)
39 list->end = &(*node)->nxt;
42 void list_nrm(List *list, ListNode **node)
44 ListNode *old = *node;
47 if (list->end == &old->nxt)
53 void list_itr(List *list, Iterator iter, void *arg, Transformer trans)
55 LIST_ITERATE(list, node)
56 iter(trans ? trans(node->dat) : node->dat, arg);
59 void list_clr(List *list, Iterator iter, void *arg, Transformer trans)
61 for (ListNode *node = list->fst; node != NULL;) {
62 ListNode *next = node->nxt;
65 iter(trans ? trans(node->dat) : node->dat, arg);