22#ifndef CLUSTALO_LIST_H
23#define CLUSTALO_LIST_H
36 void (*destroy)(
void *
data);
47#define LIST_APPEND(prList, data) ListInsertNext((prList), LIST_TAIL(prList), (data))
49#define LIST_PREPEND(prList, data) ListInsertNext((prList), CLUSTALO_LIST_HEAD(prList), (data))
53#define LIST_SIZE(prList) ((prList)->size)
55#define CLUSTALO_LIST_HEAD(prList) ((prList)->head)
57#define LIST_TAIL(prList) ((prList)->tail)
59#define LIST_IS_HEAD(prList, prElement) ((prElement) == (prList)->head ? 1 : 0)
61#define LIST_IS_TAIL(prElement) ((prElement)->next == NULL ? 1 : 0)
63#define LIST_DATA(prElement) ((prElement)->data)
65#define LIST_NEXT(prElement) ((prElement)->next)
78#define INT_LIST_INIT(prList) ListInit((prList), free)
80#define INT_LIST_DESTROY(prList) ListDestroy((prList));
84#define INT_LIST_APPEND(prList, data) IntListInsertNext((prList), LIST_TAIL(prList), (data))
86#define INT_LIST_PREPEND(prList, data) IntListInsertNext((prList), CLUSTALO_LIST_HEAD(prList), (data))
90#define INT_LIST_SIZE(prList) LIST_SIZE(prList)
92#define INT_CLUSTALO_LIST_HEAD(prList) CLUSTALO_LIST_HEAD_INT((prList))
94#define INT_LIST_TAIL(prList) LIST_TAIL_INT((prList) )
96#define INT_LIST_IS_HEAD(prList, prElement) LIST_IS_HEAD(prList, prElement)
98#define INT_LIST_IS_TAIL(prElement) LIST_IS_TAIL((prElement))
100#define INT_LIST_DATA(prElement) LIST_DATA((prElement))
102#define INT_LIST_NEXT(prElement) LIST_NEXT((prElement))
int ListRemoveNext(list_t *prList, list_elem_t *prElement, void **data)
Remove next element from current element/position.
Definition list.c:158
int ListInsertNext(list_t *prList, list_elem_t *prElement, const void *data)
Insert data next to given element.
Definition list.c:112
int IntListInsertNext(list_t *prList, list_elem_t *prElement, const int data)
Insert int next to given element.
Definition list.c:211
void ListDestroy(list_t *prList)
Calls user defined function to free data in list and resets the list to NULL. Call even if your destr...
Definition list.c:78
struct list_elem_s list_elem_t
int IntListRemoveNext(list_t *prList, list_elem_t *prElement, int *data)
Remove next element from current element/position.
Definition list.c:240
void ListInit(list_t *prList, void(*destroy)(void *data))
Initialise data members of a list.
Definition list.c:57
list_t int_list_t
Definition list.h:76
void * data
Definition list.h:28
struct list_elem_s * next
Definition list.h:29
int size
Definition list.h:34
list_elem_t * head
Definition list.h:37
list_elem_t * tail
Definition list.h:38