/*
* Doubly Linked List
*/
/* Doubly Linked List Node */
typedef struct dllist_node_t {
struct dllist_node_t *next, *prev;
void *data;
} dllist_node;
/* DLLIST - Doesn't store data just
* size of list and has pointer to
* head node and tail node */
typedef struct dllist_t {
struct dllist_node_t *head, *tail;
unsigned int size;
} dllist;
/* The various create functions */
dllist *dllist_create_list();
dllist_node *dllist_create_node(void *data);
/* The different destroy functions
* destroy_node returns the data */
int dllist_destroy_list(dllist *ddlist);
void *dllist_destroy_node(dllist_node *node); /* Shouldn't include this one but whatever */
/* The various insert functions */
void dllist_insert_after(dllist *dllist, dllist_node *node, dllist_node *newnode);
void dllist_insert_before(dllist *dllist, dllist_node *node, dllist_node *newnode);
void dllist_insert_beginning(dllist *dllist, dllist_node *newnode);
void dllist_insert_end(dllist *dllist, dllist_node *newnode);
/* Remove nodes and return the data */
void *dllist_remove(dllist *dllist, dllist_node *node);
void *dllist_remove_node_at_pos(dllist *dllist, int pos);
/* Utility functions */
dllist_node *dllist_head(dllist *dllist);
dllist_node *dllist_tail(dllist *dllist);
dllist_node *dllist_next(dllist_node *node);
dllist_node *dllist_prev(dllist_node *node);
void *dllist_data(dllist_node *node);
int dllist_size(dllist *dllist);
void *dllist_get_node(dllist *dllist, int pos);