Modules/Allocators/public/ChunkAllocator.hpp
2023-06-30 14:04:14 +00:00

32 lines
No EOL
723 B
C++

#pragma once
#include "Environment.hpp"
namespace tp {
// Chunk Allocator
// Constant time allocations and de-allocations in any order.
// Memory blocks are fixed in size and number of blocks can not exceed given parameter.
struct ChunkAlloc {
ChunkAlloc(ualni aBlockSize, void* aMemory, ualni aMemSize);
ChunkAlloc(ualni aBlockSize, ualni aNBlocks);
void* allocate();
void deallocate(void* aPtr);
[[nodiscard]] bool isFull() const;
[[nodiscard]] bool isEmpty() const;
~ChunkAlloc();
private:
ualni mBSize; // Size of data in aligned units
ualni mNBlocks;
ualni* mBuff = nullptr;
ualni* mNextBlock = nullptr;
ualni mNFreeBlocks;
ualni mNInitBlocks = 0;
bool mOwnBuff = false;
};
};