Program Listing for File BitArray.h#

Return to documentation for file (BitArray.h)

#pragma once
#include <cstdint>

class BitArray
{
public:
    static BitArray* Create(void* i_pBaseAddressOfAvailableMemory, size_t i_sizeOfAvailableMemory, size_t i_numBits, bool i_bInitToZero = true);
    void Destroy();

    static size_t GetRequiredPlatformWordArraySizeForBits(size_t i_numBits);
    static size_t GetRequiredSizeForObject(void* i_pBaseAddressOfAvailableMemory, size_t i_sizeOfAvailableMemory, size_t i_numBits);

    size_t GetBitArraySize() const;

    bool AreAllBitsClear() const;
    bool AreAllBitsSet() const;

    bool IsBitSet(size_t i_bitNumber) const;
    bool IsBitClear(size_t i_bitNumber) const;

    bool GetFirstClearBit(size_t& o_firstClearBitIndex) const;
    bool GetFirstSetBit(size_t& o_firstSetBitIndex) const;

    bool operator[](size_t i_index) const;

    void ClearAll();
    void SetAll();

    void SetBit(size_t i_bitNumber);
    void ClearBit(size_t i_bitNumber);

    void Display();
    void InvertAllBits();

    static const size_t sBitsPerElement;

private:

    BitArray* Initialize(uintptr_t i_rootAddress, uintptr_t i_alignedBaseAddressOfBitData, size_t i_numBits, bool i_bInitToZero = true);

    uintptr_t pRoot = 0;
    size_t numBits = 0;
    size_t arraySize = 0;
    uintptr_t pBaseAddressOfBitData = 0;
    uintptr_t* pBitData = nullptr;
};