1 /* spmfilter - mail filtering framework
2 * Copyright (C) 2009-2012 Axel Steiner and SpaceNet AG
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 3 of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include "smf_list.h"
19
20 /* initializes a new empty doubly linked list */
smf_list_new(SMFList_T ** list,void (* destroy)(void * data))21 int smf_list_new(SMFList_T **list, void (*destroy)(void *data)) {
22 return cmime_list_new((CMimeList_T **)list,destroy);
23 }
24
25 /* destroy a complete list */
smf_list_free(SMFList_T * list)26 int smf_list_free(SMFList_T *list) {
27 return cmime_list_free((CMimeList_T *)list);
28 }
29
30 /* remove an element from the list */
smf_list_remove(SMFList_T * list,SMFListElem_T * elem,void ** data)31 int smf_list_remove(SMFList_T *list, SMFListElem_T *elem, void **data) {
32 return cmime_list_remove((CMimeList_T *)list, (CMimeListElem_T *)elem,data);
33 }
34
35 /* remove tail element and return data pointer */
smf_list_pop_tail(SMFList_T * list)36 void* smf_list_pop_tail(SMFList_T *list) {
37 return cmime_list_pop_tail((CMimeList_T *)list);
38 }
39
smf_list_pop_head(SMFList_T * list)40 void *smf_list_pop_head(SMFList_T *list) {
41 return cmime_list_pop_head((CMimeList_T *)list);
42 }
43
44 /* insert new elem next to given element elem */
smf_list_insert_next(SMFList_T * list,SMFListElem_T * elem,void * data)45 int smf_list_insert_next(SMFList_T *list, SMFListElem_T *elem, void *data) {
46 return cmime_list_insert_next((CMimeList_T *)list, (CMimeListElem_T *)elem,data);
47 }
48
49 /* insert new element previous to given element elem */
smf_list_insert_prev(SMFList_T * list,SMFListElem_T * elem,void * data)50 int smf_list_insert_prev(SMFList_T *list, SMFListElem_T *elem, void *data) {
51 return cmime_list_insert_prev((CMimeList_T *)list, (CMimeListElem_T *)elem,data);
52 }
53
54 /* append to the end of a list */
smf_list_append(SMFList_T * list,void * data)55 int smf_list_append(SMFList_T *list, void *data) {
56 return cmime_list_append((CMimeList_T *)list,data);
57 }
58
59 /* prepend an element to the list */
smf_list_prepend(SMFList_T * list,void * data)60 int smf_list_prepend(SMFList_T *list, void *data) {
61 return cmime_list_prepend((CMimeList_T *)list,data);
62 }
63
64 /* apply function func to every element in the list */
smf_list_map(SMFList_T * list,void (* func)(SMFListElem_T * elem,void * args),void * args)65 void smf_list_map(SMFList_T *list, void(*func)(SMFListElem_T *elem,void *args), void *args) {
66 cmime_list_map((CMimeList_T *)list,func,args);
67 }
68
smf_list_map_new(SMFList_T * list,SMFList_T ** new,void * (* func)(SMFListElem_T * elem,void * args),void * args)69 int smf_list_map_new(SMFList_T *list, SMFList_T **new, void *(*func)(SMFListElem_T *elem,
70 void *args), void *args) {
71 return smf_list_map_new((CMimeList_T *)list,(CMimeList_T **)new,func,args);
72 }
73
74