Modules/public/ChunkAllocator.hpp
2023-05-26 01:35:29 +03:00

33 lines
No EOL
687 B
C++

#pragma once
#include "common.h"
#include "PublicConfig.hpp"
namespace tp {
// Chunk Allocator
// Constant time allocations and deallocations 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);
bool isFull();
bool isEmpty();
~ChunkAlloc();
private:
ualni mBSize; // Size of data in aligned units
ualni mNBlocks;
ualni* mBuff;
ualni* mNextBlock = 0;
ualni mNFreeBlocks;
ualni mNInitBlocks = 0;
bool mOwnBuff = false;
};
};