mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-04 04:00:05 +08:00
34 lines
726 B
Lua
34 lines
726 B
Lua
|
local binary = {}
|
||
|
|
||
|
---Insert item to list to ordered index
|
||
|
---@param list any[]
|
||
|
---@param item any
|
||
|
---@param func fun(a: any, b: any): "1"|"-1"|"0"
|
||
|
binary.insort = function(list, item, func)
|
||
|
table.insert(list, binary.search(list, item, func), item)
|
||
|
end
|
||
|
|
||
|
---Search suitable index from list
|
||
|
---@param list any[]
|
||
|
---@param item any
|
||
|
---@param func fun(a: any, b: any): "1"|"-1"|"0"
|
||
|
---@return number
|
||
|
binary.search = function(list, item, func)
|
||
|
local s = 1
|
||
|
local e = #list
|
||
|
while s <= e do
|
||
|
local idx = math.floor((e + s) / 2)
|
||
|
local diff = func(item, list[idx])
|
||
|
if diff > 0 then
|
||
|
s = idx + 1
|
||
|
elseif diff < 0 then
|
||
|
e = idx - 1
|
||
|
else
|
||
|
return idx + 1
|
||
|
end
|
||
|
end
|
||
|
return s
|
||
|
end
|
||
|
|
||
|
return binary
|