1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#pragma once #include <malloc.h> typedef struct ListNode ListNode; struct ListNode { ListNode* previous; ListNode* next; void* data; // more void pointers baby! }; typedef struct List List; struct List { ListNode* first; ListNode* last; }; List* List_create(); void List_destroy(List* this); void List_pushBack(List* this, void* data); void List_pushFront(List* this, void* data); void List_eraseByData(List* this, void* data); int List_getIndexForData(List* this, void* data); ListNode* List_getNodeForData(List* this, void* data); int List_length(List* this); void List_qSort(List* this, int (*compare)(void* a, void* b)); void List_qSortIt(List* this, int (*compare)(void* a, void* b), ListNode* a, ListNode* b); ListNode* ListNode_create(); void ListNode_destroy(ListNode* this); ///< warning this does not delete data #define List_destroyWithContent(this, destructor) \ ListNode* _it = this->first; \ while (_it) { \ destructor (_it->data); \ _it = _it->next; \ } \ List_destroy(this);