List.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef CORE_LIST_H
  2. #define CORE_LIST_H
  3. #include "core/Types.h"
  4. typedef struct {
  5. size_t length;
  6. size_t capacity;
  7. size_t dataSize;
  8. void* data;
  9. } CoreList;
  10. #define CORE_LIST(dataSize) ((CoreList){0, 0, dataSize, nullptr})
  11. void coreCopyList(CoreList* l, const CoreList* other);
  12. void coreMoveList(CoreList* l, CoreList* other);
  13. void coreDestroyList(CoreList* l);
  14. void coreListReserve(CoreList* l, size_t n);
  15. void coreShrinkList(CoreList* l);
  16. void coreResizeList(CoreList* l, size_t n);
  17. void coreResizeListPointer(CoreList* l, size_t n, const void* data);
  18. #define coreResizeListV(l, n, type, ...) \
  19. coreResizeListPointer(l, n, &(type){__VA_ARGS__})
  20. CoreList* coreListAddPointer(CoreList* l, const void* data);
  21. #define coreListAdd(l, type, ...) coreListAddPointer(l, &(type){__VA_ARGS__})
  22. void* coreListGetPointer(CoreList* l, size_t index);
  23. #define coreListGet(l, index, type) *(type*)coreListGetPointer(l, index)
  24. const void* coreListGetPointerC(const CoreList* l, size_t index);
  25. #define coreListGetC(l, index, type) *(const type*)coreListGetPointerC(l, index)
  26. void coreClearList(CoreList* l);
  27. void coreListRemoveBySwap(CoreList* l, size_t index);
  28. void coreListRemove(CoreList* l, size_t index);
  29. void coreListRemoveLast(CoreList* l);
  30. size_t coreToStringList(CoreList* l, char* buffer, size_t n, CoreToString c);
  31. void coreSwapList(CoreList* a, CoreList* b);
  32. #endif