mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-16 14:11:16 +07:00
queries wip
This commit is contained in:
@@ -665,38 +665,54 @@ do
|
||||
end
|
||||
|
||||
do
|
||||
local f1, f2, f3, f4 = evo.id(4)
|
||||
local f1, f2, f3, f4, f5 = evo.id(5)
|
||||
|
||||
local e1 = evo.id()
|
||||
assert(evo.insert(e1, f1, 41))
|
||||
|
||||
local e2 = evo.id()
|
||||
assert(evo.insert(e2, f1, 41))
|
||||
assert(evo.insert(e2, f2, 42))
|
||||
|
||||
local e3 = evo.id()
|
||||
assert(evo.insert(e3, f1, 43))
|
||||
assert(evo.insert(e3, f2, 44))
|
||||
assert(evo.insert(e3, f3, 45))
|
||||
|
||||
local e4 = evo.id()
|
||||
assert(evo.insert(e4, f1, 45))
|
||||
assert(evo.insert(e4, f2, 46))
|
||||
assert(evo.insert(e4, f3, 47))
|
||||
assert(evo.insert(e4, f4, 48))
|
||||
|
||||
local e5 = evo.id()
|
||||
assert(evo.insert(e5, f1, 49))
|
||||
assert(evo.insert(e5, f2, 50))
|
||||
assert(evo.insert(e5, f4, 51))
|
||||
|
||||
local e6 = evo.id()
|
||||
assert(evo.insert(e6, f1, 49))
|
||||
assert(evo.insert(e6, f2, 50))
|
||||
assert(evo.insert(e6, f4, 51))
|
||||
assert(evo.insert(e6, f5, 52))
|
||||
|
||||
local q = evo.id()
|
||||
evo.set(q, evo.INCLUDE_LIST, { f2, f1 })
|
||||
evo.set(q, evo.EXCLUDE_LIST, { f3 })
|
||||
|
||||
do
|
||||
local e1 = evo.id()
|
||||
assert(evo.insert(e1, f1, 41))
|
||||
for chunk in evo.execute(q) do
|
||||
print(chunk)
|
||||
end
|
||||
|
||||
local e2 = evo.id()
|
||||
assert(evo.insert(e2, f1, 41))
|
||||
assert(evo.insert(e2, f2, 42))
|
||||
evo.remove(q, evo.EXCLUDE_LIST)
|
||||
|
||||
local e3 = evo.id()
|
||||
assert(evo.insert(e3, f1, 43))
|
||||
assert(evo.insert(e3, f2, 44))
|
||||
assert(evo.insert(e3, f3, 45))
|
||||
for chunk in evo.execute(q) do
|
||||
print(chunk)
|
||||
end
|
||||
|
||||
local e4 = evo.id()
|
||||
assert(evo.insert(e4, f1, 45))
|
||||
assert(evo.insert(e4, f2, 46))
|
||||
assert(evo.insert(e4, f3, 47))
|
||||
assert(evo.insert(e4, f4, 48))
|
||||
evo.remove(q, evo.INCLUDE_LIST)
|
||||
|
||||
local e5 = evo.id()
|
||||
assert(evo.insert(e5, f1, 49))
|
||||
assert(evo.insert(e5, f2, 50))
|
||||
assert(evo.insert(e5, f4, 51))
|
||||
|
||||
for chunk in evo.execute(q) do
|
||||
print(chunk)
|
||||
end
|
||||
for chunk in evo.execute(q) do
|
||||
print(chunk)
|
||||
end
|
||||
end
|
||||
|
||||
21
evolved.lua
21
evolved.lua
@@ -1172,10 +1172,18 @@ assert(evolved.insert(evolved.INCLUDE_LIST, evolved.CONSTRUCT, function(_, _, in
|
||||
return include_list or {}
|
||||
end))
|
||||
|
||||
assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_REMOVE, function(query)
|
||||
evolved.remove(query, __INCLUDE_SET, __SORTED_INCLUDE_LIST)
|
||||
end))
|
||||
|
||||
assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.CONSTRUCT, function(_, _, exclude_list)
|
||||
return exclude_list or {}
|
||||
end))
|
||||
|
||||
assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.ON_REMOVE, function(query)
|
||||
evolved.remove(query, __EXCLUDE_SET, __SORTED_EXCLUDE_LIST)
|
||||
end))
|
||||
|
||||
---@param query evolved.query
|
||||
---@param include_list? evolved.entity[]
|
||||
assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_SET, function(query, _, include_list)
|
||||
@@ -1193,8 +1201,6 @@ assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_SET, function(query, _, i
|
||||
|
||||
evolved.set(query, __INCLUDE_SET, include_set)
|
||||
evolved.set(query, __SORTED_INCLUDE_LIST, sorted_include_list)
|
||||
|
||||
evolved.insert(query, evolved.EXCLUDE_LIST)
|
||||
end))
|
||||
|
||||
---@param query evolved.query
|
||||
@@ -1214,8 +1220,6 @@ assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.ON_SET, function(query, _, e
|
||||
|
||||
evolved.set(query, __EXCLUDE_SET, exclude_set)
|
||||
evolved.set(query, __SORTED_EXCLUDE_LIST, sorted_exclude_list)
|
||||
|
||||
evolved.insert(query, evolved.INCLUDE_LIST)
|
||||
end))
|
||||
|
||||
---@return evolved.execution_stack
|
||||
@@ -1242,7 +1246,8 @@ end
|
||||
---@return evolved.execution_stack
|
||||
---@nodiscard
|
||||
local function __acquire_execution_state(query)
|
||||
local exclude_set = evolved.get(query, __EXCLUDE_SET)
|
||||
---@type table<evolved.fragment, boolean>
|
||||
local exclude_set = evolved.get(query, __EXCLUDE_SET) or {}
|
||||
|
||||
if #__execution_states == 0 then
|
||||
local stack = __acquire_execution_stack()
|
||||
@@ -1303,10 +1308,14 @@ end
|
||||
---@return evolved.execution_state?
|
||||
---@nodiscard
|
||||
function evolved.execute(query)
|
||||
---@type evolved.fragment[]?, evolved.fragment[]?
|
||||
local include_list, exclude_list = evolved.get(query,
|
||||
__SORTED_INCLUDE_LIST, __SORTED_EXCLUDE_LIST)
|
||||
|
||||
if not include_list or #include_list == 0 then
|
||||
include_list = include_list or {}
|
||||
exclude_list = exclude_list or {}
|
||||
|
||||
if #include_list == 0 then
|
||||
return __execution_iterator, nil
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user