12345678910111213141516171819202122232425262728293031323334 |
- #ifndef CORE_LINKED_LIST_H
- #define CORE_LINKED_LIST_H
- #include "core/Types.h"
- struct CoreLinkedListNode {
- struct CoreLinkedListNode* next;
- struct CoreLinkedListNode* previous;
- };
- typedef struct CoreLinkedListNode CoreLinkedListNode;
- typedef struct {
- CoreLinkedListNode* first;
- CoreLinkedListNode* last;
- size_t length;
- } CoreLinkedList;
- #define CORE_LINKED_LIST ((CoreLinkedList){nullptr, nullptr, 0})
- void coreDestroyLinkedList(CoreLinkedList* l);
- CoreLinkedListNode* coreLinkedListAddPointer(CoreLinkedList* l,
- const void* data, size_t n);
- #define coreLinkedListAdd(l, type, ...) \
- coreLinkedListAddPointer(l, &(type){__VA_ARGS__}, sizeof(type))
- #define coreLinkedListGetPointer(node, type) ((type*)(node + 1))
- #define coreLinkedListGet(node, type) (*coreLinkedListGetPointer(node, type))
- void coreClearLinkedList(CoreLinkedList* l);
- void coreLinkedListRemove(CoreLinkedList* l, CoreLinkedListNode* n);
- void coreLinkedListRemoveFirst(CoreLinkedList* l);
- void coreLinkedListRemoveLast(CoreLinkedList* l);
- size_t coreToStringLinkedList(CoreLinkedList* l, char* buffer, size_t n,
- CoreToString c);
- void coreSwapLinkedList(CoreLinkedList* a, CoreLinkedList* b);
- #endif
|