Implement batched updates

No docs yet, more testing needed.
This commit is contained in:
Aaron Smith 2023-10-27 16:47:49 +01:00
parent 7d82fe353e
commit ec998ccbc8
6 changed files with 123 additions and 10 deletions

View file

@ -193,10 +193,32 @@ local function queue_children<T>(node: StartNode<T>)
update_queue.n = i
end
local function flush_update_queue()
-- todo: test with recursive batch sets
local n0 = 0
local i = n0 + 1
while i <= update_queue.n do
local node = update_queue[i]
--assert(node.effect)
if evaluate_node(node) then
queue_children(node)
end
update_queue[i] = false :: any
i += 1
end
update_queue.n = n0
end
local function update<T>(root: StartNode<T>)
local n0 = update_queue.n
queue_children(root)
if flags.batch then return end
local i = n0 + 1
while i <= update_queue.n do
local node = update_queue[i]
@ -257,5 +279,6 @@ return table.freeze {
create_node = create_node,
create_start_node = create_start_node,
get_children = get_children,
flush_update_queue = flush_update_queue,
scopes = scopes
}