From 2270c55de412aff452671959aea8d772b30252c9 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 9 Dec 2024 20:05:28 +0700 Subject: [PATCH] remove registry.apply --- README.md | 8 --- ROADMAP.md | 3 +- develop/untests/defer_untests.lua | 26 -------- develop/untests/registry_untests.lua | 97 ---------------------------- evolved/defers.lua | 37 ++--------- evolved/registry.lua | 77 ---------------------- 6 files changed, 6 insertions(+), 242 deletions(-) diff --git a/README.md b/README.md index 68169b0..c2263e8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ ``` defers.defer -> (defer) defers.set -> defer -> entity -> entity -> any -> (defer) -defers.apply -> defer -> entity -> {any -> any} -> entity -> (defer) defers.assign -> defer -> entity -> entity -> any -> (defer) defers.insert -> defer -> entity -> entity -> any -> (defer) defers.remove -> defer -> entity -> entity... -> (defer) @@ -18,7 +17,6 @@ defers.playback -> defer -> (defer) ``` defer:set -> entity -> entity -> any -> (defer) -defer:apply -> entity -> {any -> any} -> entity -> (defer) defer:assign -> entity -> entity -> any -> (defer) defer:insert -> entity -> entity -> any -> (defer) defer:remove -> entity -> entity... -> (defer) @@ -61,9 +59,6 @@ registry.has_any -> entity -> entity... -> (boolean) registry.set -> entity -> entity -> any -> (entity) registry.chunk_set -> chunk -> entity -> any -> (integer, integer) registry.query_set -> query -> entity -> any -> (integer, integer) -registry.apply -> entity -> {any -> any} -> entity -> (boolean) -registry.chunk_apply -> chunk -> {any -> any} -> entity -> (integer) -registry.query_apply -> query -> {any -> any} -> entity -> (integer) registry.assign -> entity -> entity -> any -> (boolean) registry.chunk_assign -> chunk -> entity -> any -> (integer) registry.query_assign -> query -> entity -> any -> (integer) @@ -99,7 +94,6 @@ entity:has_all -> entity... -> (boolean) entity:has_any -> entity... -> (boolean) entity:set -> entity -> any -> (entity) -entity:apply -> {any -> any} -> entity -> (boolean) entity:assign -> entity -> any -> (boolean) entity:insert -> entity -> any -> (boolean) entity:remove -> entity... -> (boolean) @@ -111,7 +105,6 @@ entity:destroy -> (entity) ``` query:set -> entity -> any -> (integer, integer) -query:apply -> {any -> any} -> entity -> (integer) query:assign -> entity -> any -> (integer) query:insert -> entity -> any -> (integer) query:remove -> entity... -> (integer) @@ -127,7 +120,6 @@ query:execute -> ({execution_state? -> chunk?}, execution_state?) ``` chunk:set -> entity -> any -> (integer, integer) -chunk:apply -> {any -> any} -> entity -> (integer) chunk:assign -> entity -> any -> (integer) chunk:insert -> entity -> any -> (integer) chunk:remove -> entity... -> (integer) diff --git a/ROADMAP.md b/ROADMAP.md index 6a443fe..944c3f9 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -14,7 +14,6 @@ - [ ] add assertions for input arguments - [x] registry.assign should not change chunks' tree - [x] add deferred changes api -- [ ] add multi apply/batch_apply - [ ] add batch vector operations - [ ] add inplace vector operations - [x] cache chunk lists in batch operations @@ -22,7 +21,7 @@ - [x] add registry.batch_set - [x] rename include/exclude/execute to query_include/exclude/execute - [x] rename entities/components to chunk_entities/components -- [ ] remove registry.apply to avoid encouraging incorrect patterns +- [x] remove registry.apply to avoid encouraging incorrect patterns - [ ] add on_set, on_assign, on_insert, on_remove callbacks - [ ] add initial component fragment - [ ] add constructor component fragment \ No newline at end of file diff --git a/develop/untests/defer_untests.lua b/develop/untests/defer_untests.lua index 955b297..0e9c88d 100644 --- a/develop/untests/defer_untests.lua +++ b/develop/untests/defer_untests.lua @@ -13,32 +13,6 @@ do assert(e:get(f) == 84) end -do - local mul2 = function(v) return v * 2 end - - local f1, f2 = evo.registry.entity(), evo.registry.entity() - local e = evo.registry.entity():set(f1, 21) - local d = evo.defers.defer():apply(e, mul2, f1) - assert(e:get(f1) == 21) - assert(d == d:playback()) - assert(e:get(f1) == 42) - - evo.defers.defer():apply(e, mul2, f2):playback() - assert(not e:has(f2) and e:get(f1) == 42) -end - -do - local mul2 = function(v) return v * 2 end - local mul3 = function(v) return v * 3 end - - local f1, f2 = evo.registry.entity(), evo.registry.entity() - local e = evo.registry.entity():set(f1, 21):set(f2, 42) - local d = evo.defers.defer():apply(e, mul2, f1):apply(e, mul3, f2) - assert(e:get(f1) == 21 and e:get(f2) == 42) - assert(d == d:playback()) - assert(e:get(f1) == 42 and e:get(f2) == 126) -end - do local f = evo.registry.entity() local e = evo.registry.entity():set(f, 21) diff --git a/develop/untests/registry_untests.lua b/develop/untests/registry_untests.lua index 895ee29..96bb574 100644 --- a/develop/untests/registry_untests.lua +++ b/develop/untests/registry_untests.lua @@ -345,56 +345,6 @@ do assert(e.__chunk == nil) end -do - local f1, f2 = evo.registry.entity(), evo.registry.entity() - local e = evo.registry.entity() - - local function mul2(v) return v * 2 end - local function null(_) end - - do - assert(not e:apply(mul2, f1)) - assert(e.__chunk == nil) - assert(not e:apply(null, f1)) - assert(e.__chunk == nil) - - assert(e:insert(f1, 21)) - assert(e:get(f1) == 21) - assert(e.__chunk == evo.registry.chunk(f1)) - - assert(e:apply(mul2, f1)) - assert(e:get(f1) == 42) - assert(e.__chunk == evo.registry.chunk(f1)) - - assert(e:apply(null, f1)) - assert(e:get(f1) == true) - assert(e.__chunk == evo.registry.chunk(f1)) - end - - do - assert(not e:apply(mul2, f2)) - assert(e:get(f1) == true) - assert(e.__chunk == evo.registry.chunk(f1)) - assert(not e:apply(null, f2)) - assert(e:get(f1) == true) - assert(e.__chunk == evo.registry.chunk(f1)) - - assert(e:insert(f2, 4)) - assert(e:get(f2) == 4) - assert(e.__chunk == evo.registry.chunk(f1, f2)) - - assert(e:apply(mul2, f2)) - assert(e:get(f1) == true) - assert(e:get(f2) == 8) - assert(e.__chunk == evo.registry.chunk(f1, f2)) - - assert(e:apply(null, f2)) - assert(e:get(f1) == true) - assert(e:get(f2) == true) - assert(e.__chunk == evo.registry.chunk(f1, f2)) - end -end - do local f1, f2, f3 = evo.registry.entity(), evo.registry.entity(), evo.registry.entity() @@ -481,53 +431,6 @@ do end end -do - local f1, f2 = evo.registry.entity(), evo.registry.entity() - - local function mul2(v) return v * 2 end - local function null(_) end - - local e1 = evo.registry.entity():set(f1, 10) - local e2 = evo.registry.entity():set(f1, 15) - local e3 = evo.registry.entity():set(f1, 20):set(f2, 40) - local e4 = evo.registry.entity():set(f1, 25):set(f2, 45) - - do - local q = evo.registry.query(f2) - assert(2 == q:apply(mul2, f1)) - assert(e1:get(f1) == 10 and e2:get(f1) == 15 and e3:get(f1) == 40 and e4:get(f1) == 50) - assert(e3:get(f2) == 40 and e4:get(f2) == 45) - end - - do - local q = evo.registry.query(f1) - assert(4 == q:apply(mul2, f1)) - assert(e1:get(f1) == 20 and e2:get(f1) == 30 and e3:get(f1) == 80 and e4:get(f1) == 100) - assert(e3:get(f2) == 40 and e4:get(f2) == 45) - end - - do - local q = evo.registry.query(f1, f2) - assert(2 == q:apply(null, f1)) - assert(e1:get(f1) == 20 and e2:get(f1) == 30 and e3:get(f1) == true and e4:get(f1) == true) - assert(e3:get(f2) == 40 and e4:get(f2) == 45) - end - - do - local q = evo.registry.query(f1) - assert(2 == q:apply(mul2, f2)) - assert(e1:get(f1) == 20 and e2:get(f1) == 30 and e3:get(f1) == true and e4:get(f1) == true) - assert(e3:get(f2) == 80 and e4:get(f2) == 90) - end - - do - local q = evo.registry.query(f1):exclude(f2) - assert(2 == q:apply(mul2, f1)) - assert(e1:get(f1) == 40 and e2:get(f1) == 60 and e3:get(f1) == true and e4:get(f1) == true) - assert(e3:get(f2) == 80 and e4:get(f2) == 90) - end -end - do local f1, f2 = evo.registry.entity(), evo.registry.entity() diff --git a/evolved/defers.lua b/evolved/defers.lua index 4f379df..b84f7be 100644 --- a/evolved/defers.lua +++ b/evolved/defers.lua @@ -13,12 +13,11 @@ local defers = {} ---@enum evolved.defer_op local evolved_defer_op = { set = 1, - apply = 2, - assign = 3, - insert = 4, - remove = 5, - detach = 6, - destroy = 7, + assign = 2, + insert = 3, + remove = 4, + detach = 5, + destroy = 6, } ---@class (exact) evolved.__defer @@ -44,13 +43,6 @@ local __operation_processors = { registry.set(entity, fragment, component) return 4 end, - [evolved_defer_op.apply] = function(ops, idx) - local entity = ops[idx + 1] - local apply = ops[idx + 2] - local fragment = ops[idx + 3] - registry.apply(entity, apply, fragment) - return 4 - end, [evolved_defer_op.assign] = function(ops, idx) local entity = ops[idx + 1] local fragment = ops[idx + 2] @@ -119,24 +111,6 @@ function defers.set(defer, entity, fragment, component) return defer end ----@param defer evolved.defer ----@param entity evolved.entity ----@param apply fun(any): any ----@param fragment evolved.entity ----@return evolved.defer -function defers.apply(defer, entity, apply, fragment) - local operations = defer.operations - local operation_count = defer.operation_count - - operations[operation_count + 1] = evolved_defer_op.apply - operations[operation_count + 2] = entity - operations[operation_count + 3] = apply - operations[operation_count + 4] = fragment - - defer.operation_count = operation_count + 4 - return defer -end - ---@param defer evolved.defer ---@param entity evolved.entity ---@param fragment evolved.entity @@ -246,7 +220,6 @@ end --- evolved_defer_mt.set = defers.set -evolved_defer_mt.apply = defers.apply evolved_defer_mt.assign = defers.assign evolved_defer_mt.insert = defers.insert evolved_defer_mt.remove = defers.remove diff --git a/evolved/registry.lua b/evolved/registry.lua index 20373bf..2106ed1 100644 --- a/evolved/registry.lua +++ b/evolved/registry.lua @@ -622,80 +622,6 @@ function registry.query_set(query, fragment, component) return assigned_count, inserted_count end ----@param entity evolved.entity ----@param apply fun(any): any ----@param fragment evolved.entity ----@return boolean is_applied -function registry.apply(entity, apply, fragment) - if not idpools.alive(__guids, entity.__guid) then - return false - end - - local chunk = entity.__chunk - if chunk == nil then return false end - - local components = chunk.__components[fragment] - if components == nil then return false end - - do - local component = components[entity.__index_in_chunk] - - component = apply(component) - component = component == nil and true or component - - components[entity.__index_in_chunk] = component - end - - return true -end - ----@param chunk evolved.chunk ----@param apply fun(any): any ----@param fragment evolved.entity ----@return integer applied_count -function registry.chunk_apply(chunk, apply, fragment) - local chunk_size = #chunk.__entities - local chunk_components = chunk.__components - local chunk_fragment_components = chunk_components[fragment] - - if chunk_size == 0 or chunk_fragment_components == nil then - return 0 - end - - for i = 1, chunk_size do - local component = chunk_fragment_components[i] - - component = apply(component) - component = component == nil and true or component - - chunk_fragment_components[i] = component - end - - return chunk_size -end - ----@param query evolved.query ----@param apply fun(any): any ----@param fragment evolved.entity ----@return integer applied_count -function registry.query_apply(query, apply, fragment) - local chunks = __execution_stack_acquire() - - for chunk in registry.query_execute(query) do - chunks[#chunks + 1] = chunk - end - - local applied_count = 0 - - for i = 1, #chunks do - local applied = registry.chunk_apply(chunks[i], apply, fragment) - applied_count = applied_count + applied - end - - __execution_stack_release(chunks) - return applied_count -end - ---@param entity evolved.entity ---@param fragment evolved.entity ---@param component any @@ -1406,7 +1332,6 @@ evolved_entity_mt.has_all = registry.has_all evolved_entity_mt.has_any = registry.has_any evolved_entity_mt.set = registry.set -evolved_entity_mt.apply = registry.apply evolved_entity_mt.assign = registry.assign evolved_entity_mt.insert = registry.insert evolved_entity_mt.remove = registry.remove @@ -1434,7 +1359,6 @@ function evolved_query_mt:__tostring() end evolved_query_mt.set = registry.query_set -evolved_query_mt.apply = registry.query_apply evolved_query_mt.assign = registry.query_assign evolved_query_mt.insert = registry.query_insert evolved_query_mt.remove = registry.query_remove @@ -1463,7 +1387,6 @@ function evolved_chunk_mt:__tostring() end evolved_chunk_mt.set = registry.chunk_set -evolved_chunk_mt.apply = registry.chunk_apply evolved_chunk_mt.assign = registry.chunk_assign evolved_chunk_mt.insert = registry.chunk_insert evolved_chunk_mt.remove = registry.chunk_remove