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