1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 11:40:05 +08:00
SpaceVim/bundle/nvim-cmp/lua/cmp/utils/binary.lua
2023-06-08 21:15:37 +08:00

34 lines
715 B
Lua
Vendored

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 integer
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