X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Flist.h;h=245a8660780c66c0840c5c5d5bcca0e4cd339df7;hp=1a915b30c1c26662dddfec4fb72412b41ecd6dac;hb=1ffe18af5bf2fda6f7dc86c514b56c6a82ec3040;hpb=9342efc81d163ea56e079b4adf2ce17c41c853b0 diff --git a/lib-lib/list.h b/lib-lib/list.h index 1a915b3..245a866 100644 --- a/lib-lib/list.h +++ b/lib-lib/list.h @@ -22,8 +22,10 @@ * Copyright (C) 1996-2000 Michael R. Elkins */ -#ifndef _MUTT_LIST_H -#define _MUTT_LIST_H +#ifndef MUTT_LIB_LIB_LIST_H +#define MUTT_LIB_LIB_LIST_H + +#include "str.h" typedef struct list_t { char *data; @@ -42,4 +44,51 @@ static inline LIST *mutt_add_list(LIST *head, const char *data) { return mutt_add_list_n(head, data, len ? len + 1 : 0); } -#endif /* !_MUTT_LIST_H */ +#define DO_SLIST(type, prefix) \ + static inline type *prefix##_list_pop(type **list) { \ + if (*list) { \ + type *res = *list; \ + *list = res->next; \ + res->next = NULL; \ + return res; \ + } \ + return NULL; \ + } \ + static inline void prefix##_list_push(type **list, type *item) { \ + item->next = *list; \ + *list = item; \ + } \ + \ + static inline type **prefix##_list_last(type **list) { \ + while (*list) { \ + list = &(*list)->next; \ + } \ + return list; \ + } \ + \ + static inline type **prefix##_list_append(type **list, type *item) { \ + list = prefix##_list_last(list); \ + *list = item; \ + return list; \ + } \ + \ + static inline type **prefix##_list_init(type **list) { \ + *list = NULL; \ + return list; \ + } \ + static inline void prefix##_list_wipe(type **list, int del) { \ + if (del) { \ + while (*list) { \ + type *item = prefix##_list_pop(list); \ + prefix##_delete(&item); \ + } \ + } else { \ + *list = NULL; \ + } \ + } \ + + + + + +#endif /* MUTT_LIB_LIB_LIST_H */