Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
128 lines
2.8 KiB
Lua
128 lines
2.8 KiB
Lua
local log = require("neo-tree.log")
|
|
|
|
Node = {}
|
|
function Node:new(value)
|
|
local props = { prev = nil, next = nil, value = value }
|
|
setmetatable(props, self)
|
|
self.__index = self
|
|
return props
|
|
end
|
|
|
|
LinkedList = {}
|
|
function LinkedList:new()
|
|
local props = { head = nil, tail = nil, size = 0 }
|
|
setmetatable(props, self)
|
|
self.__index = self
|
|
return props
|
|
end
|
|
|
|
function LinkedList:add_node(node)
|
|
if self.head == nil then
|
|
self.head = node
|
|
self.tail = node
|
|
else
|
|
self.tail.next = node
|
|
node.prev = self.tail
|
|
self.tail = node
|
|
end
|
|
self.size = self.size + 1
|
|
return node
|
|
end
|
|
|
|
function LinkedList:remove_node(node)
|
|
if node.prev ~= nil then
|
|
node.prev.next = node.next
|
|
end
|
|
if node.next ~= nil then
|
|
node.next.prev = node.prev
|
|
end
|
|
if self.head == node then
|
|
self.head = node.next
|
|
end
|
|
if self.tail == node then
|
|
self.tail = node.prev
|
|
end
|
|
self.size = self.size - 1
|
|
node.prev = nil
|
|
node.next = nil
|
|
node.value = nil
|
|
end
|
|
|
|
-- First in Last Out
|
|
Queue = {}
|
|
function Queue:new()
|
|
local props = { _list = LinkedList:new() }
|
|
setmetatable(props, self)
|
|
self.__index = self
|
|
return props
|
|
end
|
|
|
|
---Add an element to the end of the queue.
|
|
---@param value any The value to add.
|
|
function Queue:add(value)
|
|
self._list:add_node(Node:new(value))
|
|
end
|
|
|
|
---Iterates over the entire list, running func(value) on each element.
|
|
---If func returns true, the element is removed from the list.
|
|
---@param func function The function to run on each element.
|
|
function Queue:for_each(func)
|
|
local node = self._list.head
|
|
while node ~= nil do
|
|
local result = func(node.value)
|
|
local node_is_next = false
|
|
if result then
|
|
if type(result) == "boolean" then
|
|
local node_to_remove = node
|
|
node = node.next
|
|
node_is_next = true
|
|
self._list:remove_node(node_to_remove)
|
|
elseif type(result) == "table" then
|
|
if type(result.handled) == "boolean" and result.handled == true then
|
|
log.trace(
|
|
"Handler ",
|
|
node.value.id,
|
|
" for "
|
|
.. node.value.event
|
|
.. " returned handled = true, skipping the rest of the queue."
|
|
)
|
|
return result
|
|
end
|
|
end
|
|
end
|
|
if not node_is_next then
|
|
node = node.next
|
|
end
|
|
end
|
|
end
|
|
|
|
function Queue:is_empty()
|
|
return self._list.size == 0
|
|
end
|
|
|
|
function Queue:remove_by_id(id)
|
|
local current = self._list.head
|
|
while current ~= nil do
|
|
local is_match = false
|
|
local item = current.value
|
|
if item ~= nil then
|
|
local item_id = item.id or item
|
|
if item_id == id then
|
|
is_match = true
|
|
end
|
|
end
|
|
if is_match then
|
|
local next = current.next
|
|
self._list:remove_node(current)
|
|
current = next
|
|
else
|
|
current = current.next
|
|
end
|
|
end
|
|
end
|
|
|
|
return {
|
|
Queue = Queue,
|
|
LinkedList = LinkedList,
|
|
}
|