2 * written for mutt-ng by:
3 * Rocco Rutte <pdmef@cs.tu-berlin.de>
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.
13 #include <lib-lib/mem.h>
20 list2_t* list_new (void) {
21 return p_new(list2_t, 1);
24 void list_del (list2_t** l, list_del_t* del) {
29 for (i = 0; i < (*l)->length; i++)
31 p_delete(&(*l)->data);
35 void list_push_back (list2_t** l, void* p) {
38 mem_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
39 (*l)->data[(*l)->length-1] = p;
42 void list_push_front (list2_t** l, void* p) {
45 mem_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
47 memmove (&(*l)->data[1], &(*l)->data[0], ((*l)->length-1)*sizeof(void*));
51 void* list_pop_back (list2_t* l) {
55 p = l->data[l->length-1];
56 mem_realloc (&l->data, --(l->length)*sizeof(void*));
60 void* list_pop_front (list2_t* l) {
65 memmove (&l->data[0], &l->data[1], (--(l->length))*sizeof(void*));
66 mem_realloc (&l->data, l->length*sizeof(void*));
70 void* list_pop_idx (list2_t* l, int c) {
72 if (list_empty(l) || c < 0 || c >= l->length)
75 return (list_pop_back (l));
77 memmove (&l->data[c], &l->data[c+1], (l->length-c)*sizeof(void*));
78 mem_realloc (&l->data, (--(l->length))*sizeof(void*));
82 list2_t *list_cpy(list2_t *l) {
87 ret->length = l->length;
88 ret->data = p_dup(l->data, l->length);
92 list2_t* list_dup (list2_t* l, void* (*dup) (void*)) {
95 if (list_empty(l) || !*dup)
98 ret->length = l->length;
99 ret->data = p_new(void*, l->length);
100 for (i = 0; i < l->length; i++)
101 ret->data[i] = dup (l->data[i]);
105 int list_lookup (list2_t* l, int (*cmp) (const void*, const void*), const void* p) {
107 if (list_empty(l) || !*cmp)
109 for (i = 0; i < l->length; i++)
110 if (cmp (l->data[i], p) == 0)
115 list2_t* list_from_str (const char* str, const char* delim) {
117 char* tmp = NULL, *p = NULL;
119 if (!str || !*str || !delim || !*delim)
123 for (p = strtok (tmp, delim); p; p = strtok (NULL, delim)) {
124 list_push_back (&ret, str_dup (p));