diff --git a/source/ecs/hash_map.d b/source/ecs/hash_map.d index da317d2..4f25394 100755 --- a/source/ecs/hash_map.d +++ b/source/ecs/hash_map.d @@ -15,7 +15,7 @@ export ulong defaultHashFunc(T)(auto ref T t) nothrow @nogc { static if (isIntegral!(T)) { return hashInt(t); } else { - return hashInt(t.hashOf); // hashOf is not giving proper distribution between H1 and H2 hash parts + return 0;//hashInt(t.hashOf); // hashOf is not giving proper distribution between H1 and H2 hash parts } } @@ -291,106 +291,4 @@ struct HashMap(KeyPar, ValuePar, alias hashFunc = defaultHashFunc) { } return result; } - - import std.format : FormatSpec, formatValue; - - /** - * Preety print - */ - export void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) { - formatValue(sink, '[', fmt); - foreach (ref k, ref v; &byKeyValue) { - formatValue(sink, k, fmt); - formatValue(sink, ':', fmt); - formatValue(sink, v, fmt); - formatValue(sink, ", ", fmt); - } - formatValue(sink, ']', fmt); - } - -} - -static void dumpHashMapToJson(T)(ref T map, string path = "HashMapDump.json") { - Vector!char data; - import std.file; - import mutils.serializer.json; - - JSONSerializer.instance.serialize!(Load.no)(map, data); - std.file.write(path, data[]); -} - -static void printHashMap(T)(ref T map) { - import std.stdio; - - writeln(T.stringof, " dump:\n"); - foreach (k, v; &map.byKeyValue) { - writefln("%20s : %20s", k, v); - } -} - -unittest { - HashMap!(int, int) map; - - assert(map.isIn(123) == false); - assert(map.markerdDeleted == 0); - map.add(123, 1); - map.add(123, 1); - assert(map.isIn(123) == true); - assert(map.isIn(122) == false); - assert(map.length == 1); - map.remove(123); - assert(map.markerdDeleted == 1); - assert(map.isIn(123) == false); - assert(map.length == 0); - assert(map.tryRemove(500) == false); - map.add(123, 1); - assert(map.markerdDeleted == 0); - assert(map.tryRemove(123) == true); - - foreach (i; 1 .. 130) { - map.add(i, 1); - } - - foreach (i; 1 .. 130) { - assert(map.isIn(i)); - } - - foreach (i; 130 .. 500) { - assert(!map.isIn(i)); - } - - foreach (int el; map) { - assert(map.isIn(el)); - } -} - -unittest { - HashMap!(int, int) map; - map.add(1, 10); - assert(map.get(1) == 10); - assert(map.get(2, 20) == 20); - assert(!map.isIn(2)); - assert(map.getInsertDefault(2, 20) == 20); - assert(map.get(2) == 20); - map[5] = 50; - assert(map[5] == 50); - foreach (k; &map.byKey) { - } - foreach (k, v; &map.byKeyValue) { - } - foreach (v; &map.byValue) { - } -} - -unittest { - HashMap!(Vector!char, int) map; - Vector!char vecA; - - vecA ~= "AAA"; - map.add(vecA, 10); - assert(map[vecA] == 10); - map.add(vecA, 20); - assert(map[vecA] == 20); - //assert(vecA=="AAA"); - //assert(map["AAA"]==10);// TODO hashMap Vector!char and string -} +} \ No newline at end of file diff --git a/source/ecs/manager.d b/source/ecs/manager.d index b8932f3..d603b30 100644 --- a/source/ecs/manager.d +++ b/source/ecs/manager.d @@ -1720,7 +1720,6 @@ class EntityManager { block.entities_count = block.type_info.max_entities; } - //block.added_count = 0; block.added_count.atomicStore(cast(ushort) 0); } thread.blocks_to_update.clear(); @@ -1742,11 +1741,9 @@ class EntityManager void updateEvents() nothrow @nogc { bool empty = true; - //uint index = event_manager. while(1) { event_manager.swapCurrent(); - //event_manager.clearEvents(); uint current_index; if(event_manager.current_index == 0)current_index = cast(uint)threads.length; else current_index = 0; @@ -1763,7 +1760,6 @@ class EntityManager call_data.event = event_pointer; foreach(j;0..block.count) { - //void* event_pointer = cast(void*)block + event.data_offset; EntityID entity_id = *cast(EntityID*)event_pointer; Entity* entity = id_manager.getEntityPointer(entity_id); call_data.block = getMetaData(entity); @@ -1786,9 +1782,7 @@ class EntityManager } if(empty)break; empty = true; - //event_manager.clearEvents(); } - //event_manager.swapCurrent(); } export void commit() @@ -1831,8 +1825,6 @@ class EntityManager } commit(); - - //event_manager.clearEvents(); } private void getThreadID() nothrow @nogc @@ -1938,15 +1930,6 @@ class EntityManager qsort(pass.system_callers.array.ptr, pass.system_callers.length, (SystemCaller*).sizeof, &compareSystems); - /*static struct CallerData - { - uint id; - //bool - }*/ - - /*caller_data = (cast(SystemCaller**) alloca((SystemCaller*).sizeof * pass.system_callers.length))[0 - .. pass.system_callers.length];*/ - foreach (uint i, caller; pass.system_callers) caller.job_group.id = i; @@ -1955,17 +1938,6 @@ class EntityManager index = 0; foreach (uint i, caller; pass.system_callers) { - /* - if(priority == int.min)priority = caller.system.priority; - if(priority != caller.system.priority) - { - foreach(caller2;pass.system_callers[beg..i]) - { - - } - priority = caller.system.priority; - beg = i; - }*/ index = 0; foreach (ex; caller.exclusion) { @@ -2083,10 +2055,6 @@ class EntityManager EntitiesBlock* first_block; ///pointer to last block EntitiesBlock* last_block; - ///array of CallData. Contain data for System calls. - //Vector!(CallData) callers; - - ///Mutex used to managing block new alloction } /************************************************************************************************************************ @@ -2229,14 +2197,8 @@ class EntityManager bool register_state = false; - //Vector!(SystemCaller*) system_callers; - alias SytemFuncType = void function(ref EntityManager.CallData data) nothrow @nogc; - //alias sendSelfEvent = instance.event_manager.sendSelfEvent; - - //alias event_manager this; - ///Single page size. Must be power of two. enum page_size = 32768; //4096; ///Number of pages in block. @@ -2246,11 +2208,6 @@ class EntityManager BlockAllocator /*!(page_size, pages_in_block)*/ allocator; EventManager event_manager; - //mixin EventManagerCode; - - //Vector!EntityID entities_to_remove; - //Vector!(EntitiesBlock*) blocks_to_update; - //Vector!ubyte change_entities_list; void delegate(JobGroup jobs) m_dispatch_jobs; uint delegate() m_thread_id_func; diff --git a/source/ecs/vector.d b/source/ecs/vector.d index d67552f..a17aaf8 100644 --- a/source/ecs/vector.d +++ b/source/ecs/vector.d @@ -239,162 +239,4 @@ public: export bool opEquals()(auto ref const Vector!(T) r) const { return used == r.used && array.ptr[0 .. used] == r.array.ptr[0 .. r.used]; } - - export size_t toHash() const nothrow @trusted { - return hashOf(cast(Unqual!(T)[]) array.ptr[0 .. used]); - } - - import std.format : FormatSpec, formatValue; - - /** - * Preety print - */ - export void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) { - static if (__traits(compiles, formatValue(sink, array[0 .. used], fmt))) { - formatValue(sink, array[0 .. used], fmt); - } - } - -} - -// Helper to avoid GC -private T[n] s(T, size_t n)(auto ref T[n] array) pure nothrow @nogc @safe { - return array; -} - -@nogc nothrow unittest { - Vector!int vec; - assert(vec.empty); - vec.add(0); - vec.add(1); - vec.add(2); - vec.add(3); - vec.add(4); - vec.add(5); - assert(vec.length == 6); - assert(vec[3] == 3); - assert(vec[5] == 5); - assert(vec[] == [0, 1, 2, 3, 4, 5].s); - assert(!vec.empty); - vec.remove(3); - assert(vec.length == 5); - assert(vec[] == [0, 1, 2, 5, 4].s); //unstable remove -} - -@nogc nothrow unittest { - Vector!int vec; - assert(vec.empty); - vec ~= [0, 1, 2, 3, 4, 5].s; - assert(vec[] == [0, 1, 2, 3, 4, 5].s); - assert(vec.length == 6); - vec ~= 6; - assert(vec[] == [0, 1, 2, 3, 4, 5, 6].s); - -} - -@nogc nothrow unittest { - Vector!int vec; - vec ~= [0, 1, 2, 3, 4, 5].s; - vec[3] = 33; - assert(vec[3] == 33); -} - -@nogc nothrow unittest { - Vector!char vec; - vec ~= "abcd"; - assert(vec[] == cast(char[]) "abcd"); -} - -@nogc nothrow unittest { - Vector!int vec; - vec ~= [0, 1, 2, 3, 4, 5].s; - vec.length = 2; - assert(vec[] == [0, 1].s); -} -/////////////////////////////////////////// - -enum string checkVectorAllocations = ` -//assert(gVectorsCreated==gVectorsDestroyed); -gVectorsCreated=gVectorsDestroyed=0; -scope(exit){if(gVectorsCreated!=gVectorsDestroyed){ - import std.stdio : writefln; - writefln("created==destroyed %s==%s", gVectorsCreated, gVectorsDestroyed); - assert(gVectorsCreated==gVectorsDestroyed, "Vector memory leak"); -}} -`; - -unittest { - mixin(checkVectorAllocations); - Vector!int vecA = Vector!int([0, 1, 2, 3, 4, 5].s); - assert(vecA[] == [0, 1, 2, 3, 4, 5].s); - Vector!int vecB; - vecB = vecA; - assert(vecB[] == [0, 1, 2, 3, 4, 5].s); - assert(vecB.array.ptr != vecA.array.ptr); - assert(vecB.used == vecA.used); - Vector!int vecC = vecA; - assert(vecC[] == [0, 1, 2, 3, 4, 5].s); - assert(vecC.array.ptr != vecA.array.ptr); - assert(vecC.used == vecA.used); - Vector!int vecD = vecA.init; -} - -unittest { - static int numInit = 0; - static int numDestroy = 0; - scope (exit) { - assert(numInit == numDestroy); - } - static struct CheckDestructor { - int num = 1; - - this(this) { - numInit++; - } - - this(int n) { - num = n; - numInit++; - - } - - ~this() { - numDestroy++; - } - } - - CheckDestructor[2] arr = [CheckDestructor(1), CheckDestructor(1)]; - Vector!CheckDestructor vec; - vec ~= CheckDestructor(1); - vec ~= arr; - vec.remove(1); -} - -unittest { - assert(gVectorsCreated == gVectorsDestroyed); - gVectorsCreated = 0; - gVectorsDestroyed = 0; - scope (exit) { - assert(gVectorsCreated == gVectorsDestroyed); - } - string strA = "aaa bbb"; - string strB = "ccc"; - Vector!(Vector!char) vecA = Vector!(Vector!char)(Vector!char(cast(char[]) strA)); - assert(vecA[0] == Vector!char(cast(char[]) strA)); - Vector!(Vector!char) vecB; - vecB = vecA; - assert(vecB[0] == Vector!char(cast(char[]) strA)); - assert(vecA.array.ptr != vecB.array.ptr); - assert(vecB.used == vecA.used); - assert(vecB[0].array.ptr != vecA[0].array.ptr); - assert(vecB[0].used == vecA[0].used); -} - -unittest { - static struct Test { - int num; - @disable this(this); - } - - Vector!Test test; -} +} \ No newline at end of file