From caa8cc56254db36c66adb5249940e572a2b4acb1 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 8 Feb 2026 06:48:17 +0700 Subject: [PATCH] move container functions to separated local tables --- evolved.lua | 152 ++++++++++++++++++++++++---------------------------- 1 file changed, 71 insertions(+), 81 deletions(-) diff --git a/evolved.lua b/evolved.lua index fe4622b..5086951 100644 --- a/evolved.lua +++ b/evolved.lua @@ -803,14 +803,12 @@ end --- --- -local __list_new -local __list_dup -local __list_lwr +local __list_fns = {} ---@param reserve? integer ---@return any[] ---@nodiscard -function __list_new(reserve) +function __list_fns.new(reserve) return __lua_table_new(reserve) end @@ -819,14 +817,14 @@ end ---@param size? integer ---@return V[] ---@nodiscard -function __list_dup(list, size) +function __list_fns.dup(list, size) local list_size = size or #list if list_size == 0 then return {} end - local dup_list = __list_new(list_size) + local dup_list = __list_fns.new(list_size) __lua_table_move( list, 1, list_size, @@ -842,7 +840,7 @@ end ---@param size? integer ---@return integer lower_bound_index ---@nodiscard -function __list_lwr(list, item, comp, size) +function __list_fns.lwr(list, item, comp, size) local lower, upper = 1, size or #list if comp then @@ -884,20 +882,12 @@ end --- __item_count: integer, --- } -local __assoc_list_new -local __assoc_list_move -local __assoc_list_move_ex -local __assoc_list_sort -local __assoc_list_sort_ex -local __assoc_list_insert -local __assoc_list_insert_ex -local __assoc_list_remove -local __assoc_list_remove_ex +local __assoc_list_fns = {} ---@param reserve? integer ---@return evolved.assoc_list ---@nodiscard -function __assoc_list_new(reserve) +function __assoc_list_fns.new(reserve) ---@type evolved.assoc_list return { __item_set = __lua_table_new(), @@ -912,8 +902,8 @@ end ---@param src_item_last integer ---@param dst_al evolved.assoc_list ---@return integer new_dst_item_count -function __assoc_list_move(src_item_list, src_item_first, src_item_last, dst_al) - local new_dst_item_count = __assoc_list_move_ex( +function __assoc_list_fns.move(src_item_list, src_item_first, src_item_last, dst_al) + local new_dst_item_count = __assoc_list_fns.move_ex( src_item_list, src_item_first, src_item_last, dst_al.__item_set, dst_al.__item_list, dst_al.__item_count) @@ -930,8 +920,8 @@ end ---@param dst_item_count integer ---@return integer new_dst_item_count ---@nodiscard -function __assoc_list_move_ex(src_item_list, src_item_first, src_item_last, - dst_item_set, dst_item_list, dst_item_count) +function __assoc_list_fns.move_ex(src_item_list, src_item_first, src_item_last, + dst_item_set, dst_item_list, dst_item_count) if src_item_last < src_item_first then return dst_item_count end @@ -951,8 +941,8 @@ end ---@generic K ---@param al evolved.assoc_list ---@param comp? fun(a: K, b: K): boolean -function __assoc_list_sort(al, comp) - __assoc_list_sort_ex( +function __assoc_list_fns.sort(al, comp) + __assoc_list_fns.sort_ex( al.__item_set, al.__item_list, al.__item_count, comp) end @@ -962,7 +952,7 @@ end ---@param al_item_list K[] ---@param al_item_count integer ---@param comp? fun(a: K, b: K): boolean -function __assoc_list_sort_ex(al_item_set, al_item_list, al_item_count, comp) +function __assoc_list_fns.sort_ex(al_item_set, al_item_list, al_item_count, comp) if al_item_count < 2 then return end @@ -979,8 +969,8 @@ end ---@param al evolved.assoc_list ---@param item K ---@return integer new_al_count -function __assoc_list_insert(al, item) - local new_al_count = __assoc_list_insert_ex( +function __assoc_list_fns.insert(al, item) + local new_al_count = __assoc_list_fns.insert_ex( al.__item_set, al.__item_list, al.__item_count, item) @@ -995,7 +985,7 @@ end ---@param item K ---@return integer new_al_count ---@nodiscard -function __assoc_list_insert_ex(al_item_set, al_item_list, al_item_count, item) +function __assoc_list_fns.insert_ex(al_item_set, al_item_list, al_item_count, item) local item_index = al_item_set[item] if item_index then @@ -1013,8 +1003,8 @@ end ---@param al evolved.assoc_list ---@param item K ---@return integer new_al_count -function __assoc_list_remove(al, item) - local new_al_count = __assoc_list_remove_ex( +function __assoc_list_fns.remove(al, item) + local new_al_count = __assoc_list_fns.remove_ex( al.__item_set, al.__item_list, al.__item_count, item) @@ -1029,7 +1019,7 @@ end ---@param item K ---@return integer new_al_count ---@nodiscard -function __assoc_list_remove_ex(al_item_set, al_item_list, al_item_count, item) +function __assoc_list_fns.remove_ex(al_item_set, al_item_list, al_item_count, item) local item_index = al_item_set[item] if not item_index then @@ -1300,7 +1290,7 @@ function __new_chunk(chunk_parent, chunk_fragment) local chunk_parent_fragment_list = chunk_parent.__fragment_list local chunk_parent_fragment_count = chunk_parent.__fragment_count - chunk_fragment_count = __assoc_list_move_ex( + chunk_fragment_count = __assoc_list_fns.move_ex( chunk_parent_fragment_list, 1, chunk_parent_fragment_count, chunk_fragment_set, chunk_fragment_list, chunk_fragment_count) end @@ -1365,11 +1355,11 @@ function __new_chunk(chunk_parent, chunk_fragment) if not major_chunks then ---@type evolved.assoc_list - major_chunks = __assoc_list_new(4) + major_chunks = __assoc_list_fns.new(4) __major_chunks[major] = major_chunks end - __assoc_list_insert(major_chunks, chunk) + __assoc_list_fns.insert(major_chunks, chunk) end for chunk_fragment_index = 1, chunk_fragment_count do @@ -1378,11 +1368,11 @@ function __new_chunk(chunk_parent, chunk_fragment) if not minor_chunks then ---@type evolved.assoc_list - minor_chunks = __assoc_list_new(4) + minor_chunks = __assoc_list_fns.new(4) __minor_chunks[minor] = minor_chunks end - __assoc_list_insert(minor_chunks, chunk) + __assoc_list_fns.insert(minor_chunks, chunk) end __update_chunk_caches(chunk) @@ -1425,7 +1415,7 @@ end ---@param root evolved.chunk function __add_root_chunk(root) - local root_index = __list_lwr(__root_list, root, function(a, b) + local root_index = __list_fns.lwr(__root_list, root, function(a, b) return a.__fragment < b.__fragment end, __root_count) @@ -1470,7 +1460,7 @@ end ---@param child evolved.chunk ---@param parent evolved.chunk function __add_child_chunk(child, parent) - local child_index = __list_lwr(parent.__child_list, child, function(a, b) + local child_index = __list_fns.lwr(parent.__child_list, child, function(a, b) return a.__fragment < b.__fragment end, parent.__child_count) @@ -1624,9 +1614,9 @@ function __update_chunk_queries(chunk) if major_query_chunks then if __query_major_matches(chunk, major_query) then - __assoc_list_insert(major_query_chunks, chunk) + __assoc_list_fns.insert(major_query_chunks, chunk) else - __assoc_list_remove(major_query_chunks, chunk) + __assoc_list_fns.remove(major_query_chunks, chunk) end end end @@ -1901,7 +1891,7 @@ function __cache_query_chunks(query) local query_variant_count = query_variants and query_variants.__item_count or 0 ---@type evolved.assoc_list - local query_chunks = __assoc_list_new(4) + local query_chunks = __assoc_list_fns.new(4) __query_chunks[query] = query_chunks if query_include_count > 0 then @@ -1915,7 +1905,7 @@ function __cache_query_chunks(query) local major_chunk = major_chunk_list[major_chunk_index] if __query_major_matches(major_chunk, query) then - __assoc_list_insert(query_chunks, major_chunk) + __assoc_list_fns.insert(query_chunks, major_chunk) end end end @@ -1932,7 +1922,7 @@ function __cache_query_chunks(query) local major_chunk = major_chunk_list[major_chunk_index] if __query_major_matches(major_chunk, query) then - __assoc_list_insert(query_chunks, major_chunk) + __assoc_list_fns.insert(query_chunks, major_chunk) end end end @@ -3118,7 +3108,7 @@ function __purge_chunk(chunk) local major = chunk.__fragment local major_chunks = __major_chunks[major] - if major_chunks and __assoc_list_remove(major_chunks, chunk) == 0 then + if major_chunks and __assoc_list_fns.remove(major_chunks, chunk) == 0 then __major_chunks[major] = nil end end @@ -3127,7 +3117,7 @@ function __purge_chunk(chunk) local minor = chunk.__fragment_list[chunk_fragment_index] local minor_chunks = __minor_chunks[minor] - if minor_chunks and __assoc_list_remove(minor_chunks, chunk) == 0 then + if minor_chunks and __assoc_list_fns.remove(minor_chunks, chunk) == 0 then __minor_chunks[minor] = nil end end @@ -6243,13 +6233,13 @@ function __evolved_collect_garbage(no_shrink) end do - __entity_chunks = __list_dup(__entity_chunks, __acquired_count) - __entity_places = __list_dup(__entity_places, __acquired_count) + __entity_chunks = __list_fns.dup(__entity_chunks, __acquired_count) + __entity_places = __list_fns.dup(__entity_places, __acquired_count) end do - __defer_points = __list_dup(__defer_points, __defer_depth) - __defer_bytecode = __list_dup(__defer_bytecode, __defer_length) + __defer_points = __list_fns.dup(__defer_points, __defer_depth) + __defer_bytecode = __list_fns.dup(__defer_bytecode, __defer_length) end end @@ -6833,7 +6823,7 @@ function __builder_mt:include(...) local include_count = include_list and #include_list or 0 if include_count == 0 then - include_list = __list_new(argument_count) + include_list = __list_fns.new(argument_count) end for argument_index = 1, argument_count do @@ -6858,7 +6848,7 @@ function __builder_mt:exclude(...) local exclude_count = exclude_list and #exclude_list or 0 if exclude_count == 0 then - exclude_list = __list_new(argument_count) + exclude_list = __list_fns.new(argument_count) end for argument_index = 1, argument_count do @@ -6883,7 +6873,7 @@ function __builder_mt:variant(...) local variant_count = variant_list and #variant_list or 0 if variant_count == 0 then - variant_list = __list_new(argument_count) + variant_list = __list_fns.new(argument_count) end for argument_index = 1, argument_count do @@ -6908,7 +6898,7 @@ function __builder_mt:require(...) local require_count = require_list and #require_list or 0 if require_count == 0 then - require_list = __list_new(argument_count) + require_list = __list_fns.new(argument_count) end for argument_index = 1, argument_count do @@ -7140,17 +7130,17 @@ __evolved_set(__DISABLED, __TAG) __evolved_set(__DISABLED, __UNIQUE) __evolved_set(__DISABLED, __EXPLICIT) -__evolved_set(__INCLUDES, __DEFAULT, __list_new()) -__evolved_set(__INCLUDES, __DUPLICATE, __list_dup) +__evolved_set(__INCLUDES, __DEFAULT, __list_fns.new()) +__evolved_set(__INCLUDES, __DUPLICATE, __list_fns.dup) -__evolved_set(__EXCLUDES, __DEFAULT, __list_new()) -__evolved_set(__EXCLUDES, __DUPLICATE, __list_dup) +__evolved_set(__EXCLUDES, __DEFAULT, __list_fns.new()) +__evolved_set(__EXCLUDES, __DUPLICATE, __list_fns.dup) -__evolved_set(__VARIANTS, __DEFAULT, __list_new()) -__evolved_set(__VARIANTS, __DUPLICATE, __list_dup) +__evolved_set(__VARIANTS, __DEFAULT, __list_fns.new()) +__evolved_set(__VARIANTS, __DUPLICATE, __list_fns.dup) -__evolved_set(__REQUIRES, __DEFAULT, __list_new()) -__evolved_set(__REQUIRES, __DUPLICATE, __list_dup) +__evolved_set(__REQUIRES, __DEFAULT, __list_fns.new()) +__evolved_set(__REQUIRES, __DUPLICATE, __list_fns.dup) __evolved_set(__ON_SET, __UNIQUE) __evolved_set(__ON_ASSIGN, __UNIQUE) @@ -7179,11 +7169,11 @@ local function __insert_query(query) if not major_queries then ---@type evolved.assoc_list - major_queries = __assoc_list_new(4) + major_queries = __assoc_list_fns.new(4) __major_queries[query_major] = major_queries end - __assoc_list_insert(major_queries, query) + __assoc_list_fns.insert(major_queries, query) end for query_variant_index = 1, query_variant_count do @@ -7194,11 +7184,11 @@ local function __insert_query(query) if not major_queries then ---@type evolved.assoc_list - major_queries = __assoc_list_new(4) + major_queries = __assoc_list_fns.new(4) __major_queries[query_variant] = major_queries end - __assoc_list_insert(major_queries, query) + __assoc_list_fns.insert(major_queries, query) end end end @@ -7217,7 +7207,7 @@ local function __remove_query(query) local query_major = query_include_list[query_include_count] local major_queries = __major_queries[query_major] - if major_queries and __assoc_list_remove(major_queries, query) == 0 then + if major_queries and __assoc_list_fns.remove(major_queries, query) == 0 then __major_queries[query_major] = nil end end @@ -7228,7 +7218,7 @@ local function __remove_query(query) if query_include_count == 0 or query_variant > query_include_list[query_include_count] then local major_queries = __major_queries[query_variant] - if major_queries and __assoc_list_remove(major_queries, query) == 0 then + if major_queries and __assoc_list_fns.remove(major_queries, query) == 0 then __major_queries[query_variant] = nil end end @@ -7252,10 +7242,10 @@ __evolved_set(__INCLUDES, __ON_SET, function(query, _, include_list) if include_count > 0 then ---@type evolved.assoc_list - local sorted_includes = __assoc_list_new(include_count) + local sorted_includes = __assoc_list_fns.new(include_count) - __assoc_list_move(include_list, 1, include_count, sorted_includes) - __assoc_list_sort(sorted_includes) + __assoc_list_fns.move(include_list, 1, include_count, sorted_includes) + __assoc_list_fns.sort(sorted_includes) __sorted_includes[query] = sorted_includes else @@ -7290,10 +7280,10 @@ __evolved_set(__EXCLUDES, __ON_SET, function(query, _, exclude_list) if exclude_count > 0 then ---@type evolved.assoc_list - local sorted_excludes = __assoc_list_new(exclude_count) + local sorted_excludes = __assoc_list_fns.new(exclude_count) - __assoc_list_move(exclude_list, 1, exclude_count, sorted_excludes) - __assoc_list_sort(sorted_excludes) + __assoc_list_fns.move(exclude_list, 1, exclude_count, sorted_excludes) + __assoc_list_fns.sort(sorted_excludes) __sorted_excludes[query] = sorted_excludes else @@ -7328,10 +7318,10 @@ __evolved_set(__VARIANTS, __ON_SET, function(query, _, variant_list) if variant_count > 0 then ---@type evolved.assoc_list - local sorted_variants = __assoc_list_new(variant_count) + local sorted_variants = __assoc_list_fns.new(variant_count) - __assoc_list_move(variant_list, 1, variant_count, sorted_variants) - __assoc_list_sort(sorted_variants) + __assoc_list_fns.move(variant_list, 1, variant_count, sorted_variants) + __assoc_list_fns.sort(sorted_variants) __sorted_variants[query] = sorted_variants else @@ -7364,10 +7354,10 @@ __evolved_set(__REQUIRES, __ON_SET, function(fragment, _, require_list) if require_count > 0 then ---@type evolved.assoc_list - local sorted_requires = __assoc_list_new(require_count) + local sorted_requires = __assoc_list_fns.new(require_count) - __assoc_list_move(require_list, 1, require_count, sorted_requires) - __assoc_list_sort(sorted_requires) + __assoc_list_fns.move(require_list, 1, require_count, sorted_requires) + __assoc_list_fns.sort(sorted_requires) __sorted_requires[fragment] = sorted_requires else @@ -7397,11 +7387,11 @@ local function __add_subsystem(subsystem) if not group_subsystems then ---@type evolved.assoc_list - group_subsystems = __assoc_list_new(4) + group_subsystems = __assoc_list_fns.new(4) __group_subsystems[subsystem_group] = group_subsystems end - __assoc_list_insert(group_subsystems, subsystem) + __assoc_list_fns.insert(group_subsystems, subsystem) end end @@ -7412,7 +7402,7 @@ local function __remove_subsystem(subsystem) if subsystem_group then local group_subsystems = __group_subsystems[subsystem_group] - if group_subsystems and __assoc_list_remove(group_subsystems, subsystem) == 0 then + if group_subsystems and __assoc_list_fns.remove(group_subsystems, subsystem) == 0 then __group_subsystems[subsystem_group] = nil end end