#ifndef CORE_BIT_ARRAY_H
#define CORE_BIT_ARRAY_H

#include "core/Types.h"

typedef struct {
    u64 length : 56;
    u64 bits : 8;
    u64* data;
} BitArray;

static_assert(sizeof(BitArray) == 16, "invalid bit array size");

void initBitArray(BitArray* a, size_t length, size_t bits);
void destroyBitArray(BitArray* a);
void setBits(BitArray* a, size_t index, u64 value);
void setAllBits(BitArray* a, u64 value);
u64 getBits(const BitArray* a, size_t index);
i64 selectBits(const BitArray* a, size_t index);
void setBitLength(BitArray* a, size_t newLength, size_t newBits);
size_t toStringBitArray(const BitArray* a, char* buffer, size_t n);

#endif