diff -r 0f94d369bb02 -r 1bcaac272cdf ucx/dlist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ucx/dlist.h Fri Nov 30 21:18:13 2012 +0100 @@ -0,0 +1,46 @@ +/* + * + */ + +#ifndef DLIST_H +#define DLIST_H + +#include "ucx.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct UcxDlist UcxDlist; +struct UcxDlist { + void *data; + UcxDlist *restrict next; + UcxDlist *restrict prev; +}; + +UcxDlist *restrict ucx_dlist_clone(UcxDlist *restrict l, + copy_func fnc, void* data); +int ucx_dlist_equals(const UcxDlist *l1, const UcxDlist *l2, + cmp_func fnc, void* data); + +void ucx_dlist_free(UcxDlist *l); +UcxDlist *ucx_dlist_append(UcxDlist *l, void *data); +UcxDlist *ucx_dlist_prepend(UcxDlist *l, void *data); +UcxDlist *ucx_dlist_concat(UcxDlist *restrict l1, UcxDlist *restrict l2); +UcxDlist *ucx_dlist_last(const UcxDlist *l); +UcxDlist *ucx_dlist_get(const UcxDlist *l, int index); +size_t ucx_dlist_size(const UcxDlist *l); + +UcxDlist *ucx_dlist_sort(UcxDlist *l, cmp_func fnc, void *data); + +/* dlist specific functions */ +UcxDlist *ucx_dlist_first(const UcxDlist *l); +UcxDlist *ucx_dlist_remove(UcxDlist *l, UcxDlist *e); + +#ifdef __cplusplus +} +#endif + +#endif /* DLIST_H */ +