9 #include "opener_user_conf.h"
24 while(NULL != iterator) {
26 iterator = iterator->
next;
37 const void *
const data,
41 new_node->
data = (
void *)data;
56 if(NULL == list->
first) {
57 list->
first = new_node;
58 list->
last = new_node;
62 list->
first = new_node;
67 const void *
const data) {
71 if(NULL == list->
last) {
72 list->
first = new_node;
73 list->
last = new_node;
77 list->
last = new_node;
85 if(list->
first == node) {
91 new_node->
next = node;
101 if(list->
last == node) {
109 node->
next = new_node;
120 if (node == list->
first && node == list->
last) {
124 if(node == list->
first) {
127 if(node == list->
last) {
128 list->
last = previous;
130 if(NULL != previous) {
131 previous->
next = next;
void DoublyLinkedListInsertAtHead(DoublyLinkedList *const list, void *data)
DoublyLinkedListNode * first
#define OPENER_ASSERT(assertion)
DoublyLinkedListNode * previous
NodeMemoryAllocator allocator
void DoublyLinkedListRemoveNode(DoublyLinkedList *const list, DoublyLinkedListNode **pointer_to_node_pointer)
DoublyLinkedListNode * next
void DoublyLinkedListInsertAfterNode(DoublyLinkedList *const list, DoublyLinkedListNode *node, void *data)
void DoublyLinkedListNodeDestroy(const DoublyLinkedList *const list, DoublyLinkedListNode **node)
void DoublyLinkedListDestroy(DoublyLinkedList *list)
DoublyLinkedListNode * DoublyLinkedListNodeCreate(const void *const data, NodeMemoryAllocator const allocator)
void DoublyLinkedListInitialize(DoublyLinkedList *list, NodeMemoryAllocator allocator, NodeMemoryDeallocator deallocator)
void(* NodeMemoryDeallocator)(DoublyLinkedListNode **node)
void DoublyLinkedListInsertAtTail(DoublyLinkedList *const list, const void *const data)
NodeMemoryDeallocator deallocator
void DoublyLinkedListInsertBeforeNode(DoublyLinkedList *const list, DoublyLinkedListNode *node, void *data)
DoublyLinkedListNode *(* NodeMemoryAllocator)()
DoublyLinkedListNode * last