mirror of
https://github.com/centau/vide.git
synced 2026-08-20 23:01:37 +00:00
refactor: move parameter root_update_id to a new function bump_update_id
This commit is contained in:
parent
21ed76f9e0
commit
54abda629b
5 changed files with 30 additions and 12 deletions
|
|
@ -58,6 +58,11 @@ local function get_scope(): Node<unknown>?
|
||||||
return scopes[scopes.n]
|
return scopes[scopes.n]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function bump_update_id()
|
||||||
|
update_id += 1
|
||||||
|
return update_id
|
||||||
|
end
|
||||||
|
|
||||||
local function assert_stable_scope(): Node<unknown>
|
local function assert_stable_scope(): Node<unknown>
|
||||||
local scope = get_scope()
|
local scope = get_scope()
|
||||||
|
|
||||||
|
|
@ -246,9 +251,8 @@ local function flush_update_queue(from: number)
|
||||||
update_queue.n = from
|
update_queue.n = from
|
||||||
end
|
end
|
||||||
|
|
||||||
local function update_descendants<T>(root: SourceNode<T>, is_root_update: boolean?)
|
local function update_descendants<T>(root: SourceNode<T>)
|
||||||
local n0 = update_queue.n
|
local n0 = update_queue.n
|
||||||
if is_root_update and not flags.batch then update_id += 1 end
|
|
||||||
queue_children_for_update(root)
|
queue_children_for_update(root)
|
||||||
|
|
||||||
if flags.batch then return end
|
if flags.batch then return end
|
||||||
|
|
@ -324,6 +328,7 @@ return table.freeze {
|
||||||
flush_update_queue = flush_update_queue,
|
flush_update_queue = flush_update_queue,
|
||||||
get_update_queue_length = get_update_queue_length,
|
get_update_queue_length = get_update_queue_length,
|
||||||
set_context = set_context,
|
set_context = set_context,
|
||||||
|
bump_update_id = bump_update_id,
|
||||||
scopes = scopes,
|
scopes = scopes,
|
||||||
|
|
||||||
q = update_queue
|
q = update_queue
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,8 @@ local function indexes<K, VI, VO>(input: () -> Map<K, VI>, transform: (() -> VI,
|
||||||
output_cache[i] = result
|
output_cache[i] = result
|
||||||
else -- update source
|
else -- update source
|
||||||
input_nodes[i].cache = v
|
input_nodes[i].cache = v
|
||||||
update_descendants(input_nodes[i], true)
|
graph.bump_update_id()
|
||||||
|
update_descendants(input_nodes[i])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -170,7 +171,8 @@ local function values<K, VI, VO>(input: () -> Map<K, VI>, transform: (VI, () ->
|
||||||
else -- update source
|
else -- update source
|
||||||
if cv ~= i then
|
if cv ~= i then
|
||||||
input_nodes[v].cache = i
|
input_nodes[v].cache = i
|
||||||
update_descendants(input_nodes[v], true)
|
graph.bump_update_id()
|
||||||
|
update_descendants(input_nodes[v])
|
||||||
end
|
end
|
||||||
|
|
||||||
cur_input_cache[v] = nil
|
cur_input_cache[v] = nil
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ local function source<T>(initial_value: T): Source<T>
|
||||||
end
|
end
|
||||||
|
|
||||||
node.cache = v
|
node.cache = v
|
||||||
update_descendants(node, true)
|
graph.bump_update_id()
|
||||||
|
update_descendants(node)
|
||||||
return v
|
return v
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -285,7 +285,8 @@ local function update_spring_sources()
|
||||||
output.cache = vec6_to_type[typeof(data.source_value)](x0_123, x0_456)
|
output.cache = vec6_to_type[typeof(data.source_value)](x0_123, x0_456)
|
||||||
end
|
end
|
||||||
|
|
||||||
update_descendants(output, true)
|
graph.bump_update_id()
|
||||||
|
update_descendants(output)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ vide.strict = false
|
||||||
TEST("graph", function()
|
TEST("graph", function()
|
||||||
local create_node = graph.create_node
|
local create_node = graph.create_node
|
||||||
local push_child_to_scope = graph.push_child_to_scope
|
local push_child_to_scope = graph.push_child_to_scope
|
||||||
|
local bump_update_id = graph.bump_update_id
|
||||||
local update_descendants = graph.update_descendants
|
local update_descendants = graph.update_descendants
|
||||||
local push_child = graph.push_child
|
local push_child = graph.push_child
|
||||||
local get_scope = graph.get_scope
|
local get_scope = graph.get_scope
|
||||||
|
|
@ -98,9 +99,13 @@ TEST("graph", function()
|
||||||
pop_scope()
|
pop_scope()
|
||||||
|
|
||||||
CHECK(count == 1)
|
CHECK(count == 1)
|
||||||
update_descendants(a, true)
|
|
||||||
|
bump_update_id()
|
||||||
|
update_descendants(a)
|
||||||
CHECK(count == 2)
|
CHECK(count == 2)
|
||||||
update_descendants(b, true)
|
|
||||||
|
bump_update_id()
|
||||||
|
update_descendants(b)
|
||||||
CHECK(count == 3)
|
CHECK(count == 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -119,7 +124,8 @@ TEST("graph", function()
|
||||||
push_scope(c); push_child_to_scope(a); pop_scope()
|
push_scope(c); push_child_to_scope(a); pop_scope()
|
||||||
push_scope(d); push_child_to_scope(b); push_child_to_scope(c); pop_scope()
|
push_scope(d); push_child_to_scope(b); push_child_to_scope(c); pop_scope()
|
||||||
|
|
||||||
update_descendants(a, true)
|
bump_update_id()
|
||||||
|
update_descendants(a)
|
||||||
|
|
||||||
CHECK(b_cnt == 1)
|
CHECK(b_cnt == 1)
|
||||||
CHECK(c_cnt == 1)
|
CHECK(c_cnt == 1)
|
||||||
|
|
@ -138,7 +144,8 @@ TEST("graph", function()
|
||||||
|
|
||||||
push_scope(c); assert(type(c.effect) == "function" and c.effect)(NIL); pop_scope()
|
push_scope(c); assert(type(c.effect) == "function" and c.effect)(NIL); pop_scope()
|
||||||
|
|
||||||
update_descendants(a, true)
|
bump_update_id()
|
||||||
|
update_descendants(a)
|
||||||
|
|
||||||
CHECK(#get_children(a) == 1)
|
CHECK(#get_children(a) == 1)
|
||||||
CHECK(#get_children(b) == 1)
|
CHECK(#get_children(b) == 1)
|
||||||
|
|
@ -286,14 +293,16 @@ TEST("graph", function()
|
||||||
local a, b, c, d, e, f = node(root), node(root), node(root), node(root), node(root), node(root)
|
local a, b, c, d, e, f = node(root), node(root), node(root), node(root), node(root), node(root)
|
||||||
|
|
||||||
function b.effect(x)
|
function b.effect(x)
|
||||||
update_descendants(d, true)
|
bump_update_id()
|
||||||
|
update_descendants(d)
|
||||||
return not x
|
return not x
|
||||||
end
|
end
|
||||||
|
|
||||||
push_child(a, b); push_child(a, c)
|
push_child(a, b); push_child(a, c)
|
||||||
push_child(d, e); push_child(d, f)
|
push_child(d, e); push_child(d, f)
|
||||||
|
|
||||||
update_descendants(a, true)
|
bump_update_id()
|
||||||
|
update_descendants(a)
|
||||||
|
|
||||||
CHECK(true)
|
CHECK(true)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue