7 /* client should look inside */
8 typedef struct list_item
11 struct list_item *prev, *next;
14 /* but this should be opaque */
15 typedef struct list list;
17 list * l_new(void (*elt_dtor)(void *));
19 size_t l_length(const list *);
20 bool l_is_empty(const list *);
21 list_item * l_first(const list *);
22 list_item * l_last(const list *);
23 list_item * l_find(const list *, const void *,
24 int (*)(const void *, const void *));
25 list_item * l_find_last(const list *, const void *,
26 int (*)(const void *, const void *));
27 bool l_append(list *, void *);
28 bool l_prepend(list *, void *);
29 list_item * l_remove_first(list *);
30 list_item * l_remove_last(list *);
31 bool l_remove(list *, list_item *);
32 bool l_insert(list *, list_item *, void *);
33 bool l_insert_after(list *, list_item *, void *);
36 int (*)(const void *, const void *));