LinkedList.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef CORE_LINKED_LIST_H
  2. #define CORE_LINKED_LIST_H
  3. #include "core/Types.h"
  4. struct CoreLinkedListNode {
  5. struct CoreLinkedListNode* next;
  6. struct CoreLinkedListNode* previous;
  7. };
  8. typedef struct CoreLinkedListNode CoreLinkedListNode;
  9. typedef struct {
  10. CoreLinkedListNode* first;
  11. CoreLinkedListNode* last;
  12. size_t length;
  13. } CoreLinkedList;
  14. #define CORE_LINKED_LIST ((CoreLinkedList){nullptr, nullptr, 0})
  15. void coreDestroyLinkedList(CoreLinkedList* l);
  16. CoreLinkedListNode* coreLinkedListAddPointer(CoreLinkedList* l,
  17. const void* data, size_t n);
  18. #define coreLinkedListAdd(l, type, ...) \
  19. coreLinkedListAddPointer(l, &(type){__VA_ARGS__}, sizeof(type))
  20. #define coreLinkedListGetPointer(node, type) ((type*)(node + 1))
  21. #define coreLinkedListGet(node, type) (*coreLinkedListGetPointer(node, type))
  22. void coreClearLinkedList(CoreLinkedList* l);
  23. void coreLinkedListRemove(CoreLinkedList* l, CoreLinkedListNode* n);
  24. void coreLinkedListRemoveFirst(CoreLinkedList* l);
  25. void coreLinkedListRemoveLast(CoreLinkedList* l);
  26. size_t coreToStringLinkedList(CoreLinkedList* l, char* buffer, size_t n,
  27. CoreToString c);
  28. void coreSwapLinkedList(CoreLinkedList* a, CoreLinkedList* b);
  29. #endif