127 this->
nodes.Resize(maxNumAllocs);
158 for (
uint i = 0; i < this->
nodes.Size(); i++)
186 uint alignedSize =
size + alignment - 1;
193 uint bin = 0xFFFFFFFF;
201 if (bin == 0xFFFFFFFF)
207 if (bucket == 0xFFFFFFFF)
228 node.
size = alignedSize;
253 uint remainder = totalSize - node.
size;
272 return { node.
offset, nodeIndex };
323 this->
nodes[leftNode].blockNext = mergedNode;
324 this->
nodes[mergedNode].blockPrev = leftNode;
329 this->
nodes[rightNode].blockPrev = mergedNode;
330 this->
nodes[mergedNode].blockNext = rightNode;
360 newNode.
binNext = headNodeIndex;
370 headNode.
binPrev = newNodeIndex;
433 _BitScanReverse(&count, size);
435 int count = 31 - __builtin_clz(size);
453inline RangeAllocator::BinIndex
462 if ((~mask &
size) != 0)
Implements helper functions for checking bits.
Definition rangeallocator.h:38
~RangeAllocator()
Destructor.
Definition rangeallocator.h:137
RangeAllocator()
Default constructor.
Definition rangeallocator.h:114
void Clear()
Clear allocator.
Definition rangeallocator.h:145
uint size
Definition rangeallocator.h:98
Util::Array< RangeAllocatorNode > nodes
Definition rangeallocator.h:106
void RemoveNode(uint nodeIndex)
Remove node from bin.
Definition rangeallocator.h:381
uint InsertNode(uint size, uint offset)
Insert node at bin location, return node index.
Definition rangeallocator.h:338
uint bucketUsageMask
Definition rangeallocator.h:102
bool Empty()
Empty.
Definition rangeallocator.h:174
uint freeNodeIterator
Definition rangeallocator.h:100
static BinIndex IndexFromSize(uint size, bool round=false)
Get bin index from size.
Definition rangeallocator.h:454
RangeAllocation Alloc(uint size, uint alignment=1)
Allocate memory.
Definition rangeallocator.h:183
uint binMasks[NUM_BUCKETS]
Definition rangeallocator.h:103
uint freeStorage
Definition rangeallocator.h:99
Util::Array< uint > freeNodes
Definition rangeallocator.h:107
void Dealloc(const RangeAllocation &allocation)
Deallocate memory.
Definition rangeallocator.h:279
uint binHeads[NUM_BUCKETS *NUM_BINS_PER_BUCKET]
Definition rangeallocator.h:104
Nebula's dynamic array class.
Definition array.h:60
void Resize(SizeT num)
Set size. Grows array if num is greater than capacity. Calls destroy on all objects at index > num!
Definition array.h:1604
const SizeT Size() const
get number of elements in array
Definition array.h:878
#define n_assert(exp)
Definition debug.h:50
__forceinline unsigned int align(unsigned int alignant, unsigned int alignment)
Definition scalar.h:722
Allocates memory using the TLSF method (http://www.gii.upv.es/tlsf/files/ecrts04_tlsf....
Definition arenaallocator.h:31
static constexpr uint NUM_BINS_PER_BUCKET
Definition rangeallocator.h:35
static constexpr uint NUM_BUCKETS
Definition rangeallocator.h:34
uint BinFromSize(uint size, uint bucket)
Get bin from index.
Definition rangeallocator.h:444
uint BucketFromSize(uint size)
Get bucket from index.
Definition rangeallocator.h:429
uint Lsb(uint value, byte bit)
Definition bit.h:229
uint FirstOne(uint value)
Definition bit.h:169
Definition rangeallocator.h:27
uint offset
Definition rangeallocator.h:28
static constexpr uint OOM
Definition rangeallocator.h:31
uint node
Definition rangeallocator.h:29
Definition rangeallocator.h:65
uint offset
Definition rangeallocator.h:77
bool resident
Definition rangeallocator.h:75
static constexpr uint END
Definition rangeallocator.h:79
uint blockNext
Definition rangeallocator.h:81
uint size
Definition rangeallocator.h:76
RangeAllocatorNode()
Definition rangeallocator.h:66
uint blockPrev
Definition rangeallocator.h:81
uint binPrev
Definition rangeallocator.h:80
uint binNext
Definition rangeallocator.h:80
int SizeT
Definition types.h:49
unsigned int uint
Definition types.h:31
uint16_t uint16
Definition types.h:40
Definition rangeallocator.h:85
uint16 index
Definition rangeallocator.h:92
uint16 bucket
Definition rangeallocator.h:90
BinIndex()
Definition rangeallocator.h:86
uint16 bin
Definition rangeallocator.h:89