mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-14 12:10:23 +07:00
little internal hooks refactoring
This commit is contained in:
@@ -7006,3 +7006,65 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local s1, s2 = evo.id(2)
|
||||||
|
|
||||||
|
local process_order = ''
|
||||||
|
|
||||||
|
evo.set(s1, evo.PROLOGUE, function()
|
||||||
|
process_order = process_order .. '1'
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(s2, evo.PROLOGUE, function()
|
||||||
|
process_order = process_order .. '2'
|
||||||
|
end)
|
||||||
|
|
||||||
|
do
|
||||||
|
process_order = ''
|
||||||
|
evo.set(s2, evo.GROUP, s1)
|
||||||
|
evo.process(s1)
|
||||||
|
assert(process_order == '12')
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
process_order = ''
|
||||||
|
evo.remove(s2, evo.GROUP)
|
||||||
|
evo.process(s1)
|
||||||
|
assert(process_order == '1')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local s1, s2, s3 = evo.id(3)
|
||||||
|
|
||||||
|
local process_order = ''
|
||||||
|
|
||||||
|
evo.set(s1, evo.PROLOGUE, function()
|
||||||
|
process_order = process_order .. '1'
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(s2, evo.PROLOGUE, function()
|
||||||
|
process_order = process_order .. '2'
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(s3, evo.PROLOGUE, function()
|
||||||
|
process_order = process_order .. '3'
|
||||||
|
end)
|
||||||
|
|
||||||
|
do
|
||||||
|
process_order = ''
|
||||||
|
evo.set(s2, evo.GROUP, s1)
|
||||||
|
evo.process(s1)
|
||||||
|
assert(process_order == '12')
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
process_order = ''
|
||||||
|
evo.set(s2, evo.GROUP, s3)
|
||||||
|
evo.process(s1)
|
||||||
|
assert(process_order == '1')
|
||||||
|
evo.process(s3)
|
||||||
|
assert(process_order == '132')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
95
evolved.lua
95
evolved.lua
@@ -138,6 +138,7 @@ local __sorted_includes = {} ---@type table<evolved.query, evolved.assoc_list<ev
|
|||||||
local __sorted_excludes = {} ---@type table<evolved.query, evolved.assoc_list<evolved.fragment>>
|
local __sorted_excludes = {} ---@type table<evolved.query, evolved.assoc_list<evolved.fragment>>
|
||||||
local __sorted_requires = {} ---@type table<evolved.fragment, evolved.assoc_list<evolved.fragment>>
|
local __sorted_requires = {} ---@type table<evolved.fragment, evolved.assoc_list<evolved.fragment>>
|
||||||
|
|
||||||
|
local __subsystem_groups = {} ---@type table<evolved.system, evolved.system>
|
||||||
local __group_subsystems = {} ---@type table<evolved.system, evolved.assoc_list<evolved.system>>
|
local __group_subsystems = {} ---@type table<evolved.system, evolved.assoc_list<evolved.system>>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -7006,6 +7007,7 @@ __evolved_set(__ON_REMOVE, __UNIQUE)
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
|
---@param query evolved.query
|
||||||
local function __insert_query(query)
|
local function __insert_query(query)
|
||||||
local query_includes = __sorted_includes[query]
|
local query_includes = __sorted_includes[query]
|
||||||
local query_include_list = query_includes and query_includes.__item_list
|
local query_include_list = query_includes and query_includes.__item_list
|
||||||
@@ -7024,6 +7026,7 @@ local function __insert_query(query)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param query evolved.query
|
||||||
local function __remove_query(query)
|
local function __remove_query(query)
|
||||||
local query_includes = __sorted_includes[query]
|
local query_includes = __sorted_includes[query]
|
||||||
local query_include_list = query_includes and query_includes.__item_list
|
local query_include_list = query_includes and query_includes.__item_list
|
||||||
@@ -7060,9 +7063,7 @@ __evolved_set(__INCLUDES, __ON_SET, function(query, _, include_list)
|
|||||||
__sorted_includes[query] = nil
|
__sorted_includes[query] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if include_count > 0 or __sorted_excludes[query] then
|
__insert_query(query)
|
||||||
__insert_query(query)
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
__evolved_set(__INCLUDES, __ON_REMOVE, function(query)
|
__evolved_set(__INCLUDES, __ON_REMOVE, function(query)
|
||||||
@@ -7070,9 +7071,7 @@ __evolved_set(__INCLUDES, __ON_REMOVE, function(query)
|
|||||||
|
|
||||||
__sorted_includes[query] = nil
|
__sorted_includes[query] = nil
|
||||||
|
|
||||||
if __sorted_excludes[query] then
|
__insert_query(query)
|
||||||
__insert_query(query)
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -7100,9 +7099,7 @@ __evolved_set(__EXCLUDES, __ON_SET, function(query, _, exclude_list)
|
|||||||
__sorted_excludes[query] = nil
|
__sorted_excludes[query] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if exclude_count > 0 or __sorted_includes[query] then
|
__insert_query(query)
|
||||||
__insert_query(query)
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
__evolved_set(__EXCLUDES, __ON_REMOVE, function(query)
|
__evolved_set(__EXCLUDES, __ON_REMOVE, function(query)
|
||||||
@@ -7110,9 +7107,7 @@ __evolved_set(__EXCLUDES, __ON_REMOVE, function(query)
|
|||||||
|
|
||||||
__sorted_excludes[query] = nil
|
__sorted_excludes[query] = nil
|
||||||
|
|
||||||
if __sorted_includes[query] then
|
__insert_query(query)
|
||||||
__insert_query(query)
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -7126,18 +7121,17 @@ end)
|
|||||||
__evolved_set(__REQUIRES, __ON_SET, function(fragment, _, require_list)
|
__evolved_set(__REQUIRES, __ON_SET, function(fragment, _, require_list)
|
||||||
local require_count = #require_list
|
local require_count = #require_list
|
||||||
|
|
||||||
if require_count == 0 then
|
if require_count > 0 then
|
||||||
|
---@type evolved.assoc_list<evolved.fragment>
|
||||||
|
local sorted_requires = __assoc_list_new(require_count)
|
||||||
|
|
||||||
|
__assoc_list_move(require_list, 1, require_count, sorted_requires)
|
||||||
|
__assoc_list_sort(sorted_requires)
|
||||||
|
|
||||||
|
__sorted_requires[fragment] = sorted_requires
|
||||||
|
else
|
||||||
__sorted_requires[fragment] = nil
|
__sorted_requires[fragment] = nil
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---@type evolved.assoc_list<evolved.fragment>
|
|
||||||
local sorted_requires = __assoc_list_new(require_count)
|
|
||||||
|
|
||||||
__assoc_list_move(require_list, 1, require_count, sorted_requires)
|
|
||||||
__assoc_list_sort(sorted_requires)
|
|
||||||
|
|
||||||
__sorted_requires[fragment] = sorted_requires
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
__evolved_set(__REQUIRES, __ON_REMOVE, function(fragment)
|
__evolved_set(__REQUIRES, __ON_REMOVE, function(fragment)
|
||||||
@@ -7150,41 +7144,52 @@ end)
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
---@param system evolved.system
|
---@param subsystem evolved.system
|
||||||
---@param new_group evolved.system
|
local function __add_subsystem(subsystem)
|
||||||
---@param old_group? evolved.system
|
local subsystem_group = __subsystem_groups[subsystem]
|
||||||
__evolved_set(__GROUP, __ON_SET, function(system, _, new_group, old_group)
|
|
||||||
if new_group == old_group then
|
if subsystem_group then
|
||||||
return
|
local group_subsystems = __group_subsystems[subsystem_group]
|
||||||
|
|
||||||
|
if not group_subsystems then
|
||||||
|
---@type evolved.assoc_list<evolved.system>
|
||||||
|
group_subsystems = __assoc_list_new(4)
|
||||||
|
__group_subsystems[subsystem_group] = group_subsystems
|
||||||
|
end
|
||||||
|
|
||||||
|
__assoc_list_insert(group_subsystems, subsystem)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if old_group then
|
---@param subsystem evolved.system
|
||||||
local old_group_systems = __group_subsystems[old_group]
|
local function __remove_subsystem(subsystem)
|
||||||
|
local subsystem_group = __subsystem_groups[subsystem]
|
||||||
|
|
||||||
if old_group_systems and __assoc_list_remove(old_group_systems, system) == 0 then
|
if subsystem_group then
|
||||||
__group_subsystems[old_group] = nil
|
local group_subsystems = __group_subsystems[subsystem_group]
|
||||||
|
|
||||||
|
if group_subsystems and __assoc_list_remove(group_subsystems, subsystem) == 0 then
|
||||||
|
__group_subsystems[subsystem_group] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local new_group_systems = __group_subsystems[new_group]
|
---@param system evolved.system
|
||||||
|
__evolved_set(__GROUP, __ON_SET, function(system, _, group)
|
||||||
|
__remove_subsystem(system)
|
||||||
|
|
||||||
if not new_group_systems then
|
__subsystem_groups[system] = group
|
||||||
---@type evolved.assoc_list<evolved.system>
|
|
||||||
new_group_systems = __assoc_list_new(4)
|
|
||||||
__group_subsystems[new_group] = new_group_systems
|
|
||||||
end
|
|
||||||
|
|
||||||
__assoc_list_insert(new_group_systems, system)
|
__add_subsystem(system)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---@param system evolved.system
|
---@param system evolved.system
|
||||||
---@param old_group evolved.system
|
__evolved_set(__GROUP, __ON_REMOVE, function(system)
|
||||||
__evolved_set(__GROUP, __ON_REMOVE, function(system, _, old_group)
|
__remove_subsystem(system)
|
||||||
local old_group_systems = __group_subsystems[old_group]
|
|
||||||
|
|
||||||
if old_group_systems and __assoc_list_remove(old_group_systems, system) == 0 then
|
__subsystem_groups[system] = nil
|
||||||
__group_subsystems[old_group] = nil
|
|
||||||
end
|
__add_subsystem(system)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user