bubel-ecs/source/ecs/entity_allocator.d
2018-09-07 10:48:03 +02:00

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[];
}
}