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