Toc: expanded_nodes: loopless O(1) instead of O(n)

pull/8831/head
yparitcher 2 years ago committed by Frans de Jonge
parent d8087b37e3
commit 7172adc6ec

@ -856,10 +856,9 @@ end
-- expand TOC node of index in raw toc table -- expand TOC node of index in raw toc table
function ReaderToc:expandToc(index) function ReaderToc:expandToc(index)
for k, v in ipairs(self.expanded_nodes) do if self.expanded_nodes[index] == true then return end
if v == index then return end
end self.expanded_nodes[index] = true
table.insert(self.expanded_nodes, index)
local cur_node = self.toc[index] local cur_node = self.toc[index]
local cur_depth = cur_node.depth local cur_depth = cur_node.depth
local collapsed_index = nil local collapsed_index = nil
@ -891,11 +890,8 @@ end
-- collapse TOC node of index in raw toc table -- collapse TOC node of index in raw toc table
function ReaderToc:collapseToc(index) function ReaderToc:collapseToc(index)
for k, v in ipairs(self.expanded_nodes) do if self.expanded_nodes[index] == true then
if v == index then self.expanded_nodes[index] = nil
table.remove(self.expanded_nodes, k)
break
end
end end
local cur_node = self.toc[index] local cur_node = self.toc[index]
local cur_depth = cur_node.depth local cur_depth = cur_node.depth
@ -910,11 +906,8 @@ function ReaderToc:collapseToc(index)
if v.state then if v.state then
v.state:free() v.state:free()
v.state = self.expand_button:new{} v.state = self.expand_button:new{}
for y, z in ipairs(self.expanded_nodes) do if self.expanded_nodes[v.index] == true then
if z == v.index then self.expanded_nodes[v.index] = nil
table.remove(self.expanded_nodes, y)
break
end
end end
end end
table.remove(self.collapsed_toc, i) table.remove(self.collapsed_toc, i)

Loading…
Cancel
Save