51 lines
907 B
D
51 lines
907 B
D
module ecs.entity_allocator;
|
|
|
|
enum bucketSize = 4096;
|
|
enum bucketsInAllocation = 128;
|
|
|
|
struct Bucket
|
|
{
|
|
union
|
|
{
|
|
ubyte[bucketSize] memory;
|
|
Bucket* next;
|
|
}
|
|
|
|
}
|
|
|
|
struct BucketArray
|
|
{
|
|
Bucket[bucketsInAllocation] buckets;
|
|
}
|
|
|
|
struct EntityAllocator
|
|
{
|
|
BucketArray[] arrays;
|
|
Bucket* lastEmptyBucket;
|
|
|
|
void initBucketArray(ref BucketArray bArr)
|
|
{
|
|
|
|
}
|
|
|
|
void allocateBucketArray()
|
|
{
|
|
auto bucketArray = new BucketArray();
|
|
assert(bucketArray.buckets[0].ptr % bucketSize == 0) arrays ~= bucketArray;
|
|
Bucket* lasBucket = initBucketArray(bucketArray);
|
|
lastEmptyBucket = lasBucket;
|
|
}
|
|
|
|
ubyte[] getMemory()
|
|
{
|
|
if (lastEmptyBucket is null)
|
|
{
|
|
allocateBucket();
|
|
}
|
|
auto bucketTmp = lastEmptyBucket;
|
|
lastEmptyBucket = bucketTmp.next;
|
|
|
|
return bucketTmp.memory[];
|
|
}
|
|
|
|
}
|