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
62 lines
1.5 KiB
Lua
62 lines
1.5 KiB
Lua
--- Wrapper class to interact with blobs
|
|
--- @class Blob
|
|
|
|
local Blob
|
|
|
|
--- @param str string
|
|
--- @param index number
|
|
--- @return number, number
|
|
local function str_iter(str, index)
|
|
if index == #str then return end
|
|
index = index + 1
|
|
return index, str:sub(index, index):byte()
|
|
end
|
|
|
|
--- @param bytes_str string|number
|
|
--- @return function, string, number
|
|
local function str_to_bytes(bytes_str)
|
|
if type(bytes_str) == 'number' then bytes_str = tostring(bytes_str) end
|
|
if type(bytes_str) ~= 'string' then error('string expected, got ' .. type(bytes_str)) end
|
|
return str_iter, bytes_str, 0
|
|
end
|
|
|
|
local blob_methods = {
|
|
--- @param self Blob
|
|
--- @param bytes_str string|number
|
|
add = function(self, bytes_str)
|
|
local is_empty = not self[0]
|
|
for _, byte in str_to_bytes(bytes_str) do
|
|
if is_empty then
|
|
table.insert(self, 0, byte)
|
|
is_empty = false
|
|
else
|
|
table.insert(self, byte)
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
|
|
local blob_mt = {
|
|
_vim_type = 'blob',
|
|
__index = blob_methods,
|
|
__newindex = function(blob, key, value)
|
|
if type(key) == 'number' then rawset(blob, key, value) end
|
|
return
|
|
end,
|
|
__len = function(blob) return rawlen(blob) + 1 end,
|
|
}
|
|
|
|
--- @param bytes_str string|number
|
|
--- @return Blob
|
|
function Blob(bytes_str)
|
|
local blob = {}
|
|
if bytes_str ~= nil then
|
|
for idx, byte in str_to_bytes(bytes_str) do
|
|
blob[idx - 1] = byte
|
|
end
|
|
end
|
|
return setmetatable(blob, blob_mt)
|
|
end
|
|
|
|
return Blob
|