#include "list.h" struct _list { LINKEDLIST; }; void list_init(struct list *list) { list->tail = list; list->head = list; list->end = list; } int list_empty(struct list *list) { return list->head == list->end; } int list_singleton(struct list *list) { return list->head == list->tail && list->head != list->end; } void *list_circular_prev(void *_node) { struct _list *node = _node; do { node = node->prev; } while (node == node->listhead); return node; } void *list_circular_next(void *_node) { struct _list *node = _node; do { node = node->next; } while (node == node->listhead); return node; } void list_insert(void *_next, void *_node) { struct _list *node = _node; struct _list *next = _next; struct _list *prev = next->prev; next->prev = node; prev->next = node; node->next = next; node->prev = prev; node->listhead = next->listhead; } void list_remove(void *_node) { struct _list *node = _node; struct _list *next = node->next; struct _list *prev = node->prev; next->prev = prev; prev->next = next; }