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 bool l_append(list *, void *);
24 bool l_prepend(list *, void *);
25 list_item * l_remove_first(list *);
26 list_item * l_remove_last(list *);
27 bool l_insert(list *, list_item *, void *);
28 bool l_insert_after(list *, list_item *, void *);
29 bool l_remove(list *, list_item *);
31 bool l_splice(list *dst, list_item *dst_pos,
32 list *src, list_item *src_pos);
34 int (*)(const void *, const void *));