#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__}) CoreList* coreListAddLast(CoreList* l); void* coreListAddEmpty(CoreList* l); void* coreListGetVoidPointer(CoreList* l, size_t index); #define coreListGetPointer(l, index, type) \ ((type*)coreListGetVoidPointer(l, index)) #define coreListGet(l, index, type) (*coreListGetPointer(l, index, type)) const void* coreListGetVoidPointerC(const CoreList* l, size_t index); #define coreListGetPointerC(l, index, type) \ ((const type*)coreListGetVoidPointerC(l, index)) #define coreListGetC(l, index, type) (*coreListGetPointerC(l, index, type)) void* coreListLastVoidPointer(CoreList* l); #define coreListLastPointer(l, type) ((type*)coreListLastVoidPointer(l)) #define coreListLast(l, type) (*coreListLastPointer(l, type)) const void* coreListLastVoidPointerC(const CoreList* l); #define coreListLastPointerC(l, type) ((const type*)coreListLastVoidPointerC(l)) #define coreListLastC(l, type) (*coreListLastPointerC(l, type)) 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); void* coreListBegin(CoreList* l); void* coreListEnd(CoreList* l); #endif