remove wildcard-set

This commit is contained in:
BlackMATov
2025-07-21 22:09:51 +07:00
parent 90e7bb25ef
commit b6e4bfe608
2 changed files with 6 additions and 177 deletions

View File

@@ -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)

View File

@@ -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