From b6e4bfe608cb4109a41504579430d9ab3423f6df Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 21 Jul 2025 22:09:51 +0700 Subject: [PATCH] remove wildcard-set --- develop/testing/pairs_tests.lua | 104 -------------------------------- evolved.lua | 79 ++---------------------- 2 files changed, 6 insertions(+), 177 deletions(-) diff --git a/develop/testing/pairs_tests.lua b/develop/testing/pairs_tests.lua index 5f84a2e..73bf5d3 100644 --- a/develop/testing/pairs_tests.lua +++ b/develop/testing/pairs_tests.lua @@ -530,10 +530,6 @@ do evo.set(e, evo.pair(p1, s2), 42) assert(evo.get(e, evo.pair(p1, s1)) == 84) assert(evo.get(e, evo.pair(p1, s2)) == 42) - - evo.set(e, evo.pair(p1, evo.ANY), 21) - assert(evo.get(e, evo.pair(p1, s1)) == 21) - assert(evo.get(e, evo.pair(p1, s2)) == 21) end end @@ -810,106 +806,6 @@ do assert(evo.secondary_count(e, evo.ANY) == 0) end -do - local f, p1, p2, s1, s2 = evo.id(5) - - do - local e = evo.builder() - :set(f) - :set(evo.pair(p1, s1), 42) - :set(evo.pair(p1, s2), 84) - :set(evo.pair(p2, s1), 21) - :set(evo.pair(p2, s2), 63) - :spawn() - - local ef = evo.builder() - :set(f) - :spawn() - - evo.set(e, evo.pair(p1, evo.ANY), 99) - - assert(evo.get(e, evo.pair(p1, s1)) == 99) - assert(evo.get(e, evo.pair(p1, s2)) == 99) - assert(evo.get(e, evo.pair(p2, s1)) == 21) - assert(evo.get(e, evo.pair(p2, s2)) == 63) - - local q = evo.builder():include(f):spawn() - evo.batch_set(q, evo.pair(p1, evo.ANY), 42) - - assert(evo.get(e, evo.pair(p1, s1)) == 42) - assert(evo.get(e, evo.pair(p1, s2)) == 42) - assert(evo.get(e, evo.pair(p2, s1)) == 21) - assert(evo.get(e, evo.pair(p2, s2)) == 63) - - assert(evo.has(ef, f)) - assert(not evo.has(ef, evo.pair(evo.ANY, evo.ANY))) - end - - do - local e = evo.builder() - :set(f) - :set(evo.pair(p1, s1), 42) - :set(evo.pair(p1, s2), 84) - :set(evo.pair(p2, s1), 21) - :set(evo.pair(p2, s2), 63) - :spawn() - - local ef = evo.builder() - :set(f) - :spawn() - - evo.set(e, evo.pair(evo.ANY, s1), 99) - - assert(evo.get(e, evo.pair(p1, s1)) == 99) - assert(evo.get(e, evo.pair(p1, s2)) == 84) - assert(evo.get(e, evo.pair(p2, s1)) == 99) - assert(evo.get(e, evo.pair(p2, s2)) == 63) - - local q = evo.builder():include(f):spawn() - evo.batch_set(q, evo.pair(evo.ANY, s1), 42) - - assert(evo.get(e, evo.pair(p1, s1)) == 42) - assert(evo.get(e, evo.pair(p1, s2)) == 84) - assert(evo.get(e, evo.pair(p2, s1)) == 42) - assert(evo.get(e, evo.pair(p2, s2)) == 63) - - assert(evo.has(ef, f)) - assert(not evo.has(ef, evo.pair(evo.ANY, evo.ANY))) - end - - do - local e = evo.builder() - :set(f) - :set(evo.pair(p1, s1), 42) - :set(evo.pair(p1, s2), 84) - :set(evo.pair(p2, s1), 21) - :set(evo.pair(p2, s2), 63) - :spawn() - - local ef = evo.builder() - :set(f) - :spawn() - - evo.set(e, evo.pair(evo.ANY, evo.ANY), 99) - - assert(evo.get(e, evo.pair(p1, s1)) == 99) - assert(evo.get(e, evo.pair(p1, s2)) == 99) - assert(evo.get(e, evo.pair(p2, s1)) == 99) - assert(evo.get(e, evo.pair(p2, s2)) == 99) - - local q = evo.builder():include(f):spawn() - evo.batch_set(q, evo.pair(evo.ANY, evo.ANY), 42) - - assert(evo.get(e, evo.pair(p1, s1)) == 42) - assert(evo.get(e, evo.pair(p1, s2)) == 42) - assert(evo.get(e, evo.pair(p2, s1)) == 42) - assert(evo.get(e, evo.pair(p2, s2)) == 42) - - assert(evo.has(ef, f)) - assert(not evo.has(ef, evo.pair(evo.ANY, evo.ANY))) - end -end - do do local p, s = evo.id(2) diff --git a/evolved.lua b/evolved.lua index 58fc539..120a7ff 100644 --- a/evolved.lua +++ b/evolved.lua @@ -3193,43 +3193,6 @@ function __chunk_set(old_chunk, fragment, component) return end - if __is_wildcard(fragment) then - local primary, secondary = __evolved_unpair(fragment) - - local new_component = component - if new_component == nil then new_component = true end - - ---@type evolved.id[]?, integer - local pair_list, pair_count = nil, 0 - - if primary == __ANY and secondary == __ANY then - pair_list = old_chunk.__pair_list - pair_count = old_chunk.__pair_count - elseif primary == __ANY then - local pairs = old_chunk.__secondary_pairs[secondary] - pair_list = pairs and pairs.__item_list - pair_count = pairs and pairs.__item_count or 0 - elseif secondary == __ANY then - local pairs = old_chunk.__primary_pairs[primary] - pair_list = pairs and pairs.__item_list - pair_count = pairs and pairs.__item_count or 0 - end - - for pair_index = 1, pair_count do - ---@cast pair_list -? - local pair = pair_list[pair_index] - - local component_index = old_component_indices[pair] - local component_storage = old_component_storages[component_index] - - for old_place = 1, old_entity_count do - component_storage[old_place] = new_component - end - end - - return - end - local new_chunk = __chunk_with_fragment(old_chunk, fragment) if not new_chunk then @@ -5011,12 +4974,17 @@ function __evolved_set(entity, fragment, component) __id_name(entity)) end + if __is_wildcard(fragment) then + __error_fmt('the wildcard fragment (%s) cannot be set', + __id_name(fragment)) + end + if __defer_depth > 0 then __defer_set(entity, fragment, component) return end - local entity_index = entity % 0x100000 + local entity_index = entity % 2 ^ 20 local entity_chunks = __entity_chunks local entity_places = __entity_places @@ -5024,41 +4992,6 @@ function __evolved_set(entity, fragment, component) local old_chunk = entity_chunks[entity_index] local old_place = entity_places[entity_index] - if __is_wildcard(fragment) then - local primary, secondary = __evolved_unpair(fragment) - - local new_component = component - if new_component == nil then new_component = true end - - ---@type evolved.id[]?, integer - local pair_list, pair_count = nil, 0 - - if primary == __ANY and secondary == __ANY then - pair_list = old_chunk.__pair_list - pair_count = old_chunk.__pair_count - elseif primary == __ANY then - local pairs = old_chunk.__secondary_pairs[secondary] - pair_list = pairs and pairs.__item_list - pair_count = pairs and pairs.__item_count or 0 - elseif secondary == __ANY then - local pairs = old_chunk.__primary_pairs[primary] - pair_list = pairs and pairs.__item_list - pair_count = pairs and pairs.__item_count or 0 - end - - for pair_index = 1, pair_count do - ---@cast pair_list -? - local pair = pair_list[pair_index] - - local component_index = old_chunk.__component_indices[pair] - local component_storage = old_chunk.__component_storages[component_index] - - component_storage[old_place] = new_component - end - - return - end - local new_chunk = __chunk_with_fragment(old_chunk, fragment) if not new_chunk then