-added SimpleVector (vector with only ubyte data)
-components adding and removing now use SimpleVector (optimalization)
This commit is contained in:
parent
b04ab77e0c
commit
01ff3962b5
2 changed files with 70 additions and 2 deletions
|
|
@ -20,6 +20,7 @@ import ecs.hash_map;
|
|||
import ecs.id_manager;
|
||||
import ecs.system;
|
||||
import ecs.vector;
|
||||
import ecs.simple_vector;
|
||||
import ecs.events;
|
||||
import ecs.traits;
|
||||
|
||||
|
|
@ -1387,7 +1388,7 @@ export class EntityManager
|
|||
data.change_entities_list.add(0);
|
||||
data.change_entities_list.add((cast(ubyte*)&entity_id)[0 .. EntityID.sizeof]);
|
||||
data.change_entities_list.add((cast(ubyte*)&num)[0 .. uint.sizeof]);
|
||||
data.change_entities_list.add(cast(ubyte[]) del_ids);
|
||||
data.change_entities_list.add((cast(ubyte*)del_ids.ptr)[0 .. num * 2]);
|
||||
}
|
||||
|
||||
private void __removeComponents(EntityID entity_id, ushort[] del_ids)
|
||||
|
|
@ -2685,7 +2686,8 @@ export class EntityManager
|
|||
struct ThreadData
|
||||
{
|
||||
Vector!EntityID entities_to_remove;
|
||||
Vector!ubyte change_entities_list;
|
||||
//Vector!ubyte change_entities_list;
|
||||
SimpleVector change_entities_list;
|
||||
Vector!(EntitiesBlock*) blocks_to_update;
|
||||
}
|
||||
|
||||
|
|
|
|||
66
source/ecs/simple_vector.d
Normal file
66
source/ecs/simple_vector.d
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
module ecs.simple_vector;
|
||||
|
||||
import std.experimental.allocator;
|
||||
import std.experimental.allocator.mallocator;
|
||||
|
||||
import core.stdc.string;
|
||||
|
||||
struct SimpleVector
|
||||
{
|
||||
|
||||
@disable this(this);
|
||||
|
||||
void add(ubyte el) nothrow @nogc
|
||||
{
|
||||
while(used >= data.length)
|
||||
{
|
||||
if(data is null)data = Mallocator.instance.makeArray!ubyte(1024);
|
||||
else Mallocator.instance.expandArray(data,data.length);
|
||||
}
|
||||
data[used++] = el;
|
||||
}
|
||||
|
||||
void add(ubyte[] el) nothrow @nogc
|
||||
{
|
||||
while(used + el.length >= data.length)
|
||||
{
|
||||
if(data is null)data = Mallocator.instance.makeArray!ubyte(1024);
|
||||
else Mallocator.instance.expandArray(data,data.length);
|
||||
}
|
||||
memcpy(data.ptr + used, el.ptr, el.length);
|
||||
used += el.length;
|
||||
}
|
||||
|
||||
size_t length() nothrow @nogc
|
||||
{
|
||||
return used;
|
||||
}
|
||||
|
||||
export ref ubyte opIndex(size_t pos) nothrow @nogc
|
||||
{
|
||||
return data[pos];
|
||||
}
|
||||
|
||||
export ubyte[] opSlice() nothrow @nogc
|
||||
{
|
||||
return data[0 .. used];
|
||||
}
|
||||
|
||||
export ubyte[] opSlice(size_t x, size_t y) nothrow @nogc
|
||||
{
|
||||
return data[x .. y];
|
||||
}
|
||||
|
||||
export size_t opDollar() nothrow @nogc
|
||||
{
|
||||
return used;
|
||||
}
|
||||
|
||||
void clear() nothrow @nogc
|
||||
{
|
||||
used = 0;
|
||||
}
|
||||
|
||||
ubyte[] data = null;
|
||||
size_t used = 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue