empty function set for pairs

This commit is contained in:
BlackMATov
2025-06-16 21:31:41 +07:00
parent 4f33796b97
commit 9a2a62ec89
2 changed files with 24 additions and 10 deletions

View File

@@ -72,3 +72,18 @@ do
assert(evo.has_all(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY))) assert(evo.has_all(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY)))
assert(evo.has_any(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY))) assert(evo.has_any(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY)))
end end
do
local p1, s1, p2, s2 = evo.id(4)
evo.set(p1, s1)
evo.set(s1, p1)
evo.set(p2, s2)
assert(evo.empty(evo.pair(p1, s1)))
assert(evo.empty(evo.pair(p2, s2)))
assert(evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2)))
assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2)))
assert(not evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2), p1))
assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2), p1))
assert(evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2), s2))
assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2), s2))
end

View File

@@ -4228,8 +4228,13 @@ end
---@return boolean ---@return boolean
---@nodiscard ---@nodiscard
function __evolved_empty(entity) function __evolved_empty(entity)
local entity_index = entity % 0x100000 if entity > 0 then
return __freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index] local entity_index = entity % 0x100000
return __freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index]
else
-- pairs are always empty
return true
end
end end
---@param ... evolved.entity entities ---@param ... evolved.entity entities
@@ -4242,13 +4247,10 @@ function __evolved_empty_all(...)
return true return true
end end
local freelist_ids = __freelist_ids
for argument_index = 1, argument_count do for argument_index = 1, argument_count do
---@type evolved.entity ---@type evolved.entity
local entity = __lua_select(argument_index, ...) local entity = __lua_select(argument_index, ...)
local entity_index = entity % 0x100000 if not __evolved_empty(entity) then
if freelist_ids[entity_index] == entity and __entity_chunks[entity_index] then
return false return false
end end
end end
@@ -4266,13 +4268,10 @@ function __evolved_empty_any(...)
return false return false
end end
local freelist_ids = __freelist_ids
for argument_index = 1, argument_count do for argument_index = 1, argument_count do
---@type evolved.entity ---@type evolved.entity
local entity = __lua_select(argument_index, ...) local entity = __lua_select(argument_index, ...)
local entity_index = entity % 0x100000 if __evolved_empty(entity) then
if freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index] then
return true return true
end end
end end