Rocco Rutte:
[apps/madmutt.git] / lib / list.h
1 /*
2  * written for mutt-ng by:
3  * Rocco Rutte <pdmef@cs.tu-berlin.de>
4  *
5  * This file is part of mutt-ng, see http://www.muttng.org/.
6  * It's licensed under the GNU General Public License,
7  * please see the file GPL in the top level source directory.
8  */
9
10 /*
11  * this aims to provide a generic list 
12  * implementation using arrays only
13  * mostly untested
14  */
15
16 #ifndef _LIB_LIST_H
17 #define _LIB_LIST_H
18
19 #include <sys/types.h>
20
21 typedef struct list2_t {
22   void** data;
23   size_t length;
24 } list2_t;
25
26 /*
27  * basics
28  */
29
30 list2_t* list_new (void);
31 /* frees all memory used by list and optionally used edel func
32  * ptr to free items */
33 void list_del (list2_t**, void (*edel) (void**));
34
35 #define list_empty(l) (!l || l->length == 0 || !l->data)
36
37 /*
38  * insertion, removal
39  * the list_push_* functions create a list if empty so far
40  * for convenience
41  */
42 void list_push_back (list2_t**, void*);
43 void list_push_front (list2_t**, void*);
44 void* list_pop_back (list2_t*);
45 void* list_pop_front (list2_t*);
46 void* list_pop_idx (list2_t*, int);
47
48 /*
49  * copying
50  */
51
52 /* plain copy */
53 list2_t* list_cpy (list2_t*);
54 /* "hard copy" using callback to copy items */
55 list2_t* list_dup (list2_t*, void* (*dup) (void*));
56
57 /*
58  * misc
59  */
60
61 /* looks up item in list using callback function and comparison item
62  * return:
63  *      -1 if not found
64  *      index in data array otherwise
65  * the callback must return 0 on equality
66  */
67 int list_lookup (list2_t*, int (*cmp) (const void*, const void*), const void*);
68
69 #endif /* !_LIB_LIST_H */