#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* coreBitArraySet(CoreBitArray* a, size_t index, u64 value); u64 coreBitArrayGet(const CoreBitArray* a, size_t index); size_t coreBitArrayBytes(const CoreBitArray* a); i64 coreBitArraySelect(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); #endif