28#ifndef __LIBFREEWRL_LIST_H__
29#define __LIBFREEWRL_LIST_H__
44#define ml_elem(_item) (_item->elem)
45#define ml_next(_item) (_item->next)
47typedef void f_free_t(
void *ptr);
48#if defined(DEBUG_MALLOC) && defined(DEBUG_MALLOC_LIST)
49extern s_list_t* _ml_new(
const void *elem,
int line,
char *fi);
50#define ml_new(elem) _ml_new(elem,__LINE__,__FILE__)
52extern s_list_t* ml_new(
const void *elem);
54extern int ml_count(s_list_t *list);
55extern s_list_t* ml_prev(s_list_t *list, s_list_t *item);
56extern s_list_t* ml_last(s_list_t *list);
57extern s_list_t* ml_find(s_list_t *list, s_list_t *item);
58extern s_list_t* ml_find_elem(s_list_t *list,
void *elem);
59extern s_list_t* ml_insert(s_list_t *list, s_list_t *point, s_list_t *item);
60extern s_list_t* ml_append(s_list_t *list, s_list_t *item);
61extern void ml_delete(s_list_t *list, s_list_t *item);
62extern s_list_t* ml_delete_self(s_list_t *list, s_list_t *item);
63extern void ml_delete2(s_list_t *list, s_list_t *item, f_free_t f);
64extern void ml_delete_all(s_list_t *list);
65extern void ml_delete_all2(s_list_t *list, f_free_t f);
66extern s_list_t* ml_get(s_list_t *list,
int index);
67extern void ml_enqueue(s_list_t **list, s_list_t *item);
68extern s_list_t* ml_dequeue(s_list_t **list);
69extern void ml_free(s_list_t *item);
71#define ml_foreach(_list,_action) {\
74 for(__l=_list;__l!=NULL;) {\
75 next = ml_next(__l); \
80extern void ml_dump(s_list_t *list);
81extern void ml_dump_char(s_list_t *list);
91#define cdl_elem(_item) (_item->elem)
92#define cdl_next(_item) (_item->next)
93#define cdl_prev(_item) (_item->prev)
94#define cdl_last(_head) (_head->prev)
96extern cd_list_t* cdl_new(
const void *elem);
97extern int cdl_count(cd_list_t *head);
98extern cd_list_t* cdl_find(cd_list_t *head, cd_list_t *item);
99extern cd_list_t* cdl_find_elem(cd_list_t *head,
void *elem);
100extern cd_list_t* cdl_insert(cd_list_t *head, cd_list_t *point, cd_list_t *item);
101extern cd_list_t* cdl_append(cd_list_t *head, cd_list_t *item);
102extern cd_list_t* cdl_delete(cd_list_t *head, cd_list_t *item);
103extern cd_list_t* cdl_delete2(cd_list_t *head, cd_list_t *item, f_free_t f);
104extern void cdl_delete_all(cd_list_t *head);
105extern void cdl_delete_all2(cd_list_t *head, f_free_t f);
106extern cd_list_t* cdl_get(cd_list_t *head,
int index);
108#define cdl_foreach(_head,_action) {\
113 next = cdl_next(__l); \
116 }while(__l != head);\
118extern void cdl_dump(cd_list_t *list);
119extern void cdl_dump_char(cd_list_t *list);