#ifndef CORE_LIST_H #define CORE_LIST_H #include "core/Types.h" typedef struct { size_t length; size_t capacity; size_t dataSize; void* data; } CoreList; #define CORE_LIST(dataSize) ((CoreList){0, 0, dataSize, nullptr}) void coreCopyList(CoreList* l, const CoreList* other); void coreMoveList(CoreList* l, CoreList* other); void coreDestroyList(CoreList* l); void coreListReserve(CoreList* l, size_t n); void coreShrinkList(CoreList* l); void coreResizeList(CoreList* l, size_t n); void coreResizeListPointer(CoreList* l, size_t n, const void* data); #define coreResizeListV(l, n, type, ...) \ coreResizeListPointer(l, n, &(type){__VA_ARGS__}) CoreList* coreListAddPointer(CoreList* l, const void* data); #define coreListAdd(l, type, ...) coreListAddPointer(l, &(type){__VA_ARGS__}) void* coreListGetPointer(CoreList* l, size_t index); #define coreListGet(l, index, type) *(type*)coreListGetPointer(l, index) const void* coreListGetPointerC(const CoreList* l, size_t index); #define coreListGetC(l, index, type) *(const type*)coreListGetPointerC(l, index) void coreClearList(CoreList* l); void coreListRemoveBySwap(CoreList* l, size_t index); void coreListRemove(CoreList* l, size_t index); void coreListRemoveLast(CoreList* l); size_t coreToStringList(CoreList* l, char* buffer, size_t n, CoreToString c); void coreSwapList(CoreList* a, CoreList* b); #endif