7 #ifndef SRC_UTILS_DOUBLYLINKEDLIST_H_
8 #define SRC_UTILS_DOUBLYLINKEDLIST_H_
54 const void *
const data);
void DoublyLinkedListDestroy(DoublyLinkedList *list)
void DoublyLinkedListInsertAfterNode(DoublyLinkedList *const list, DoublyLinkedListNode *node, void *data)
void DoublyLinkedListInitialize(DoublyLinkedList *list, NodeMemoryAllocator allocator, NodeMemoryDeallocator deallocator)
DoublyLinkedListNode * first
DoublyLinkedListNode * previous
NodeMemoryAllocator allocator
void DoublyLinkedListRemoveNode(DoublyLinkedList *const list, DoublyLinkedListNode **pointer_to_node_pointer)
DoublyLinkedListNode * DoublyLinkedListNodeCreate(const void *const data, NodeMemoryAllocator allocator)
DoublyLinkedListNode * next
void DoublyLinkedListNodeDestroy(const DoublyLinkedList *const list, DoublyLinkedListNode **node)
void(* NodeMemoryDeallocator)(DoublyLinkedListNode **node)
void DoublyLinkedListInsertAtHead(DoublyLinkedList *const list, void *data)
NodeMemoryDeallocator deallocator
DoublyLinkedListNode *(* NodeMemoryAllocator)()
void DoublyLinkedListInsertAtTail(DoublyLinkedList *const list, const void *const data)
struct doubly_linked_list_node DoublyLinkedListNode
void DoublyLinkedListInsertBeforeNode(DoublyLinkedList *const list, DoublyLinkedListNode *node, void *data)
DoublyLinkedListNode * last