32 lines
No EOL
723 B
C++
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;
|
|
};
|
|
}; |