rohrpost

A commandline mail client to change the world as we see it.
git clone git://r-36.net/rohrpost
Log | Files | Refs | 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