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 uint alignedSize =
size + alignment - 1;
270 node.
size = alignedSize;
295 uint remainder = totalSize - node.
size;
316 return RangeAllocation{ .offset = alignedOffset, .size = alignedSize, .node = nodeIndex };
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;
505 exp = mantissaStartBit + 1;
508 uint lowBitsMask = (1 << mantissaStartBit) - 1;
511 if ((size & lowBitsMask) != 0)
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
uint size
Definition rangeallocator.h:108
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
uint InsertNode(uint size, uint offset)
Insert node at bin location, return node index.
Definition rangeallocator.h:385
static constexpr uint NUM_BUCKETS
Definition rangeallocator.h:113
static constexpr uint NUM_BINS_PER_BUCKET
Definition rangeallocator.h:114
static uint BucketFromSize(uint size)
Get bucket from index.
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(uint size, bool round=false)
Get bin index from size.
Definition rangeallocator.h:561
RangeAllocation Alloc(uint size, uint alignment=1)
Allocate range.
Definition rangeallocator.h:223
uint binMasks[NUM_BUCKETS]
Definition rangeallocator.h:118
uint freeStorage
Definition rangeallocator.h:109
Util::Array< uint > freeNodes
Definition rangeallocator.h:122
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
__forceinline unsigned int align(unsigned int alignant, unsigned int alignment)
Definition scalar.h:741
Definition arenaallocator.h:31
static constexpr uint MANTISSA_VALUE
Definition rangeallocator.h:480
uint BinMask(uint size)
Calculate bin mask using 16 bit float distribution, and round up to highest value.
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
uint BinMaskRoundedUp(uint size)
Calculate bin mask using 16 bit float distribution.
Definition rangeallocator.h:489
static constexpr uint BIN_INDEX_MASK
Definition rangeallocator.h:127
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
uint offset
Definition rangeallocator.h:26
static constexpr uint OOM
Definition rangeallocator.h:30
uint 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
uint offset
Definition rangeallocator.h:85
bool resident
Definition rangeallocator.h:83
static constexpr uint END
Definition rangeallocator.h:87
uint blockNext
Definition rangeallocator.h:89
uint size
Definition rangeallocator.h:84
RangeAllocatorNode()
Definition rangeallocator.h:74
uint blockPrev
Definition rangeallocator.h:89
uint binPrev
Definition rangeallocator.h:88
uint binNext
Definition rangeallocator.h:88
int SizeT
Definition types.h:42
unsigned int uint
Definition types.h:33