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