30 static constexpr size_t OOM = 0xFFFFFFFF;
145 this->
freeNodes.Resize(maxNumAllocs + 1);
146 this->
nodes.Resize(maxNumAllocs + 1);
179 for (
uint i = 0; i < this->
nodes.Size(); i++)
207 uint maskBeforeStartIndex = (1 << startBitIndex) - 1;
208 uint maskAfterStartIndex = ~maskBeforeStartIndex;
209 uint bitsAfter = bitMask & maskAfterStartIndex;
222inline RangeAllocation
226 size_t alignedSize =
size + alignment - 1;
267 size_t totalSize = node.
size;
270 node.
size = alignedSize;
295 size_t remainder = totalSize - node.
size;
296 if (remainder > 0ull)
316 return RangeAllocation{ .offset = alignedOffset, .size = alignedSize, .node = nodeIndex };
330 size_t offset = node.
offset;
370 this->
nodes[mergedNode].blockPrev = leftNode;
371 this->
nodes[leftNode].blockNext = mergedNode;
376 this->
nodes[mergedNode].blockNext = rightNode;
377 this->
nodes[rightNode].blockPrev = mergedNode;
391 uint16_t index = binIndex.
index;
409 newNode.
binNext = headNodeIndex;
422 headNode.
binPrev = newNodeIndex;
424 this->
binHeads[index] = newNodeIndex;
445 uint16_t index = binIndex.
index;
497 mantissa = (
uint)size;
505 exp = mantissaStartBit + 1;
508 size_t lowBitsMask = (1 << mantissaStartBit) - 1;
511 if ((size & lowBitsMask) != 0)
531 mantissa = (
uint)size;
539 exp = mantissaStartBit + 1;
Implements helper functions for checking bits.
~RangeAllocator()
Destructor.
Definition rangeallocator.h:157
RangeAllocator()
Default constructor.
Definition rangeallocator.h:133
void Clear()
Clears the allocator.
Definition rangeallocator.h:165
static uint BinFromSize(uint size, uint bucket)
Get bin from index.
Definition rangeallocator.h:550
Util::Array< RangeAllocatorNode > nodes
Definition rangeallocator.h:121
void RemoveNode(uint nodeIndex)
Remove node from bin.
Definition rangeallocator.h:433
size_t size
Definition rangeallocator.h:108
static constexpr uint NUM_BUCKETS
Definition rangeallocator.h:113
static uint BucketFromSize(size_t size)
Get bucket from index.
static constexpr uint NUM_BINS_PER_BUCKET
Definition rangeallocator.h:114
uint InsertNode(size_t size, size_t offset)
Insert node at bin location, return node index.
Definition rangeallocator.h:385
uint bucketUsageMask
Definition rangeallocator.h:117
uint numAllocs
Definition rangeallocator.h:111
bool Empty()
Checks if the allocator is empty.
Definition rangeallocator.h:196
uint freeNodeIterator
Definition rangeallocator.h:110
static BinIndex IndexFromSize(size_t size, bool round=false)
Get bin index from size.
Definition rangeallocator.h:561
uint binMasks[NUM_BUCKETS]
Definition rangeallocator.h:118
RangeAllocation Alloc(size_t size, size_t alignment=1)
Allocate range.
Definition rangeallocator.h:223
Util::Array< uint > freeNodes
Definition rangeallocator.h:122
size_t freeStorage
Definition rangeallocator.h:109
void Dealloc(const RangeAllocation &allocation)
Deallocate range.
Definition rangeallocator.h:323
uint binHeads[NUM_BUCKETS *NUM_BINS_PER_BUCKET]
Definition rangeallocator.h:119
Nebula's dynamic array class.
Definition array.h:60
#define n_assert(exp)
Definition debug.h:50
Definition arenaallocator.h:31
__forceinline unsigned int align(unsigned int alignant, unsigned int alignment)
Definition memory.h:21
static constexpr uint MANTISSA_VALUE
Definition rangeallocator.h:480
uint BinMask(size_t size)
Calculate bin mask using 16 bit float distribution.
Definition rangeallocator.h:523
static constexpr uint BUCKET_INDEX_SHIFT
Definition rangeallocator.h:126
uint FindLowestSetBitAfter(uint bitMask, uint startBitIndex)
Definition rangeallocator.h:205
static constexpr uint MANTISSA_MASK
Definition rangeallocator.h:481
static constexpr uint MANTISSA_BITS
Definition rangeallocator.h:479
static constexpr uint BIN_INDEX_MASK
Definition rangeallocator.h:127
uint BinMaskRoundedUp(size_t size)
Calculate bin mask using 16 bit float distribution and round up to nearest upper bin.
Definition rangeallocator.h:489
uint CountTrailingZeroes(uint value)
Definition bit.h:261
uint LastBitSetIndex(uint value)
Definition bit.h:199
Describes a range allocated by the Memory::RangeAllocator.
Definition rangeallocator.h:25
static constexpr size_t OOM
Definition rangeallocator.h:30
size_t offset
Definition rangeallocator.h:26
size_t size
Definition rangeallocator.h:27
uint node
Definition rangeallocator.h:28
Definition rangeallocator.h:93
uint bin
Definition rangeallocator.h:95
uint index
Definition rangeallocator.h:97
uint bucket
Definition rangeallocator.h:96
BinIndex()
Definition rangeallocator.h:94
Definition rangeallocator.h:73
bool resident
Definition rangeallocator.h:83
static constexpr uint END
Definition rangeallocator.h:87
uint blockNext
Definition rangeallocator.h:89
size_t offset
Definition rangeallocator.h:85
RangeAllocatorNode()
Definition rangeallocator.h:74
uint blockPrev
Definition rangeallocator.h:89
uint binPrev
Definition rangeallocator.h:88
size_t size
Definition rangeallocator.h:84
uint binNext
Definition rangeallocator.h:88
int SizeT
Definition types.h:42
unsigned int uint
Definition types.h:33