Program Listing for File FixedSizeAllocator.h#

Return to documentation for file (FixedSizeAllocator.h)

#pragma once
#include <cstdint>


#include "FSAData.h"

class BitArray;

class FixedSizeAllocator
{
public:
    static FixedSizeAllocator* Create(void* i_pBaseAddressOfAvailableMemory, size_t i_sizeOfAvailableMemoryMemory, size_t i_sizeOfBlock, size_t i_numberOfBlocks);
    void Destroy();

    FixedSizeAllocator* Initialize(uintptr_t i_rootAddress, size_t i_totalSize,
        size_t i_sizeOfBlock, size_t i_numberOfBlocks, uintptr_t i_pBaseAddressOfAvailableMemory, size_t i_remainingAvailableSize, uintptr_t i_alignedBaseAddressOfFixedSizeMemoryBlocks);

    void* Alloc();
    bool Free(void* i_pMemory);
    bool Contains(void* i_pMemory) const;

    FSAData GetFSAData() const;

    static size_t GetRequiredSizeForFixedSizeMemoryBlocks(size_t i_sizeOfBlock, size_t i_numberOfBlocks);

    void ShowFreeBlocks() const;
    void ShowOutstandingAllocations() const;

private:
    uintptr_t pRoot = 0;
    size_t totalSize = 0;
    FSAData FSAInfoData = {0,0};
    BitArray* pFSABitArray = nullptr;
    uintptr_t pBaseAddressOfFixedSizeMemoryBlocks = 0;
};