]> begriffs open source - libderp/blob - include/list.h
Initial list stuff
[libderp] / include / list.h
1 #ifndef LIBDERP_LIST_H
2 #define LIBDERP_LIST_H
3
4 #include <stdbool.h>
5 #include <stddef.h>
6
7 /* client should look inside */
8 typedef struct list_item
9 {
10         void *data;
11         struct list_item *prev, *next;
12 } list_item;
13
14 /* but this should be opaque */
15 typedef struct list list;
16
17 list *      l_new(void (*elt_dtor)(void *));
18 void        l_free(list *);
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 *);
30 bool        l_clear(list *);
31 bool        l_splice(list *dst, list_item *dst_pos,
32                      list *src, list_item *src_pos);
33 bool        l_sort(list *,
34                    int (*)(const void *, const void *));
35
36 #endif