#ifndef CORE_BIT_ARRAY_H #define CORE_BIT_ARRAY_H #include "core/Types.h" typedef struct { u64 length : 56; u64 bits : 8; u64* data; } CoreBitArray; static_assert(sizeof(CoreBitArray) == 16, "invalid bit array size"); #define CORE_BIT_ARRAY ((CoreBitArray){0, 0, nullptr}) void coreCopyBitArray(CoreBitArray* a, const CoreBitArray* other); void coreMoveBitArray(CoreBitArray* a, CoreBitArray* other); void coreDestroyBitArray(CoreBitArray* a); CoreBitArray* coreSetBitsBitArray(CoreBitArray* a, size_t index, u64 value); u64 coreGetBitsBitArray(const CoreBitArray* a, size_t index); size_t coreGetBytesBitArray(const CoreBitArray* a); i64 coreSelectBitsBitArray(const CoreBitArray* a, size_t index); void coreResizeBitArray(CoreBitArray* a, size_t newLength, size_t newBits); void coreFillBitArray(CoreBitArray* a, u64 value); size_t coreToStringBitArray(const CoreBitArray* a, char* buffer, size_t n); void coreSwapBitArray(CoreBitArray* a, CoreBitArray* b); #ifdef IMPORT_CORE #define BitArray CoreBitArray #define BIT_ARRAY CORE_BIT_ARRAY #define copyBitArray coreCopyBitArray #define moveBitArray coreMoveBitArray #define destroyBitArray coreDestroyBitArray #define setBitsBitArray coreSetBitsBitArray #define getBitsBitArray coreGetBitsBitArray #define getBytesBitArray coreGetBytesBitArray #define selectBitsBitArray coreSelectBitsBitArray #define resizeBitArray coreResizeBitArray #define fillBitArray coreFillBitArray #define toStringBitArray coreToStringBitArray #define swapBitArray coreSwapBitArray #endif #endif