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