/* * written for mutt-ng by: * Rocco Rutte * * This file is part of mutt-ng, see http://www.muttng.org/. * It's licensed under the GNU General Public License, * please see the file GPL in the top level source directory. */ /* * this aims to provide a generic list * implementation using arrays only * mostly untested */ #ifndef _LIB_LIST_H #define _LIB_LIST_H #include typedef struct list2_t { void** data; size_t length; } list2_t; /* * basics */ list2_t* list_new (void); typedef void list_del_t (void**); /* free() all memory used by list and optionally * use del function to free() items as well */ void list_del (list2_t**, list_del_t* del); #define list_empty(l) (!l || l->length == 0 || !l->data) /* * insertion, removal * the list_push_* functions create a list if empty so far * for convenience */ void list_push_back (list2_t**, void*); void list_push_front (list2_t**, void*); void* list_pop_back (list2_t*); void* list_pop_front (list2_t*); void* list_pop_idx (list2_t*, int); /* * copying */ /* plain copy */ list2_t* list_cpy (list2_t*); /* "hard copy" using callback to copy items */ list2_t* list_dup (list2_t*, void* (*dup) (void*)); /* * misc */ /* looks up item in list using callback function and comparison item * return: * -1 if not found * index in data array otherwise * the callback must return 0 on equality */ typedef int list_lookup_t (const void*, const void*); int list_lookup (list2_t*, list_lookup_t* cmp, const void*); /* * dumb-splits string at boundary characters into list */ list2_t* list_from_str (const char* str, const char* delim); #endif /* !_LIB_LIST_H */