llist.h - rohrpost - A commandline mail client to change the world as we see it.
(HTM) git clone git://r-36.net/rohrpost
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
llist.h (3405B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 */
5
6 #ifndef __LLIST_H__
7 #define __LLIST_H__
8
9 #define forllist(list, elem) for (elem = (list)->first;\
10 elem; elem = elem->next)
11
12 #define isstructlist(list) ((list)->first != NULL)
13
14 typedef struct llistelem_t llistelem_t;
15 struct llistelem_t {
16 llistelem_t *next;
17 llistelem_t *prev;
18
19 char *key;
20 void *data;
21 int datalen;
22 };
23
24 typedef struct llist_t llist_t;
25 struct llist_t {
26 llistelem_t *first;
27 llistelem_t *last;
28 int len;
29 };
30
31 void llistelemvalue_free(llistelem_t *elem);
32 void llistelem_free(llistelem_t *elem);
33 void llistelemvalue_efree(llistelem_t *elem);
34 void llistelem_efree(llistelem_t *elem);
35 llistelem_t *llistelem_set(llistelem_t *elem, char *key, void *data,
36 int datalen);
37 llistelem_t *llistelem_rawset(llistelem_t *elem, char *key, void *data,
38 int datalen);
39
40 llistelem_t *llistelem_new(char *key, void *data, int datalen);
41 llistelem_t *llistelem_rawnew(char *key, void *data, int datalen);
42
43 void llistelem_print(llistelem_t *elem);
44 void llistelem_printkey(llistelem_t *elem);
45 void llistelem_printdata(llistelem_t *elem);
46
47 int llistelem_cmp(llistelem_t *elem1, llistelem_t *elem2);
48
49
50 llist_t *llist_new(void);
51
52 void llist_free(llist_t *llist);
53 void llist_bfree(llist_t *llist);
54 void llist_efree(llist_t *llist);
55 void llist_ebfree(llist_t *llist);
56
57 llistelem_t *llist_addelem(llist_t *llist, llistelem_t *elem);
58 llistelem_t *llist_addraw(llist_t *llist, char *key, void *data,
59 int datalen);
60 llistelem_t *llist_add(llist_t *llist, char *key,
61 void *data, int datalen);
62 llistelem_t *llist_push(llist_t *llist, char *key,
63 void *data, int datalen);
64 llistelem_t *llist_pop(llist_t *llist);
65
66 llist_t *llist_find(llist_t *llist, char *regex);
67 llist_t *llist_efind(llist_t *llist, char *regex);
68 llist_t *llist_cifind(llist_t *llist, char *regex);
69 llist_t *llist_ecifind(llist_t *llist, char *regex);
70 llistelem_t *llist_get(llist_t *llist, char *key);
71 llistelem_t *llist_ciget(llist_t *llist, char *key);
72 llistelem_t *llist_eget(llist_t *llist, char *key);
73 llistelem_t *llist_eciget(llist_t *llist, char *key);
74 llistelem_t *llist_getn(llist_t *llist, int idx);
75
76 void llist_delelemlinks(llist_t *llist, llistelem_t *elem);
77 void llist_delelem(llist_t *llist, llistelem_t *elem);
78 llistelem_t *llist_del(llist_t *llist, char *key);
79
80 llistelem_t *llist_insert(llist_t *llist, llistelem_t *elem, int idx);
81 llistelem_t *llist_move(llist_t *llist, llistelem_t *elem, int idx);
82
83 void llist_print(llist_t *llist);
84 void llistelem_eprintelem(llistelem_t *elem, int depth);
85 void llist_eprint(llist_t *llist);
86
87 void llistelem_eprint(llistelem_t *elem);
88
89 llist_t *llist_getdiff(llist_t *llist1, llist_t *llist2);
90 llist_t *llist_getsame(llist_t *llist1, llist_t *llist2);
91 llist_t *llist_copy(llist_t *llist);
92 llist_t *llist_listdel(llist_t *llist, llist_t *elems);
93 llist_t *llist_listadd(llist_t *llist, llist_t *elems);
94 llist_t *llist_rawlistadd(llist_t *llist, llist_t *elems);
95
96 llist_t *llist_splitstr(char *str, char *sep);
97 llist_t *llist_splitargv(int argc, char *argv[]);
98
99 char *llist_joinstr(llist_t *llist, char *sep);
100 llist_t *llist_genrange(int begin, int end, int step);
101
102 int llist_strcmp(llistelem_t *elem1, llistelem_t *elem2);
103 int llist_intcmp(llistelem_t *elem1, llistelem_t *elem2);
104 llist_t *llist_sort(llist_t *llist);
105 llist_t *llist_intsort(llist_t *llist);
106 llist_t *llist_internsort(llist_t *llist,
107 int (*cmp)(llistelem_t *, llistelem_t *));
108
109 #endif
110