#ifndef ZLIST_H #define ZLIST_H #include #define ZLIST_FORWARD 1 #define ZLIST_BACKWARD 2 typedef struct zlist { int index; struct zlist *head; struct zlist *tail; struct zlist *prev; struct zlist *next; void *data; } zlist; zlist *new_zlist(void *data); zlist *append_zlist_entry(zlist *node, void *data); zlist *prepend_zlist_entry(zlist *node, void *data); zlist *find_zlist_head(zlist *node); zlist *find_zlist_tail(zlist *node); void remove_zlist_entry(zlist *entry, int dofree, void (*free_func)(void *ptr)); zlist *insert_zlist_entry(zlist *before, zlist *after, void *data); void free_zlist(zlist *node, int dofree, void (*free_func)(void *ptr)); zlist *iterate_zlist(zlist *node, int mode); #endif // ZLIST_H