-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.id_manager;
|
||||||
import ecs.system;
|
import ecs.system;
|
||||||
import ecs.vector;
|
import ecs.vector;
|
||||||
|
import ecs.simple_vector;
|
||||||
import ecs.events;
|
import ecs.events;
|
||||||
import ecs.traits;
|
import ecs.traits;
|
||||||
|
|
||||||
|
|
@ -1387,7 +1388,7 @@ export class EntityManager
|
||||||
data.change_entities_list.add(0);
|
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*)&entity_id)[0 .. EntityID.sizeof]);
|
||||||
data.change_entities_list.add((cast(ubyte*)&num)[0 .. uint.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)
|
private void __removeComponents(EntityID entity_id, ushort[] del_ids)
|
||||||
|
|
@ -2685,7 +2686,8 @@ export class EntityManager
|
||||||
struct ThreadData
|
struct ThreadData
|
||||||
{
|
{
|
||||||
Vector!EntityID entities_to_remove;
|
Vector!EntityID entities_to_remove;
|
||||||
Vector!ubyte change_entities_list;
|
//Vector!ubyte change_entities_list;
|
||||||
|
SimpleVector change_entities_list;
|
||||||
Vector!(EntitiesBlock*) blocks_to_update;
|
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