]> git.lizzy.rs Git - dragonstd.git/blob - list.h
Rename to dragonstd
[dragonstd.git] / list.h
1 #ifndef _DRAGONSTD_LIST_H_
2 #define _DRAGONSTD_LIST_H_
3
4 #include <stdbool.h>
5
6 #define ITERATE_LIST(list, pair) for (ListPair *pair = (list)->first; pair != NULL; pair = pair->next)
7
8 typedef struct ListPair
9 {
10         struct ListPair *next;
11         void *key;
12         void *value;
13 } ListPair;
14
15 typedef bool (*ListComparator)(void *v1, void *v2);
16
17 typedef struct
18 {
19         ListComparator cmp;
20         ListPair *first;
21 } List;
22
23 bool list_compare_default(void *v1, void *v2);
24 bool list_compare_string(void *v1, void *v2);
25
26 List list_create(ListComparator cmp);
27 void list_clear(List *list);
28 void list_clear_func(List *list, void (*func)(void *key, void *value, void *arg), void *arg);
29
30 bool list_put(List *list, void *key, void *value);
31 void *list_get_cached(List *list, void *key, void *(*provider)(void *key));
32 void list_set(List *list, void *key, void *value);
33 void *list_get(List *list, void *key);
34 void *list_delete(List *list, void *key);
35
36 bool list_serialize(int fd, List *list); // ToDo
37 bool list_deserialize(int fd, List *list); // ToDo
38
39 #endif