#ifndef CORE_BIT_ARRAY_H #define CORE_BIT_ARRAY_H #include "core/Types.h" struct CoreBitArrayT { u64 length : 56; u64 bits : 8; u64* data; }; typedef struct CoreBitArrayT CoreBitArray; static_assert(sizeof(CoreBitArray) == 16, "invalid bit array size"); void coreInitBitArray(CoreBitArray* a, size_t length, size_t bits); void coreDestroyBitArray(CoreBitArray* a); void coreSetBits(CoreBitArray* a, size_t index, u64 value); void coreSetAllBits(CoreBitArray* a, u64 value); u64 coreGetBits(const CoreBitArray* a, size_t index); i64 coreSelectBits(const CoreBitArray* a, size_t index); void coreSetBitLength(CoreBitArray* a, size_t newLength, size_t newBits); #ifdef IMPORT_CORE #define BitArray CoreBitArray #define initBitArray coreInitBitArray #define destroyBitArray coreDestroyBitArray #define setBits coreSetBits #define setAllBits coreSetAllBits #define getBits coreGetBits #define selectBits coreSelectBits #define setBitLength coreSetBitLength #endif #endif