You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
3.6 KiB

4 years ago
--========================================================--
-- Scorpio Encoder System --
-- --
-- Author : kurapica125@outlook.com --
-- Create Date : 2021/09/05 --
--========================================================--
--========================================================--
Scorpio "Scorpio.Encoder" ""
--========================================================--
import "System.Text"
export { concat = table.concat }
_Recycle = Recycle()
__Static__()
function Scorpio.Base64Encode(str)
if coroutine.running() then
local index = 0
local cache = _Recycle()
local tindex = 0
local temp = _Recycle()
for c in Base64.Encodes(str) do
tindex = tindex + 1
temp[tindex] = c
if tindex == 256 then
index = index + 1
cache[index] = concat(temp)
tindex = 0
wipe(temp)
Continue()
end
end
if tindex > 0 then
index = index + 1
cache[index] = concat(temp)
wipe(temp)
end
local result = concat(cache)
_Recycle(wipe(cache))
_Recycle(temp)
return result
else
return Base64.Encode(str)
end
end
__Static__()
function Scorpio.Base64Decode(str)
if coroutine.running() then
local index = 0
local cache = _Recycle()
local tindex = 0
local temp = _Recycle()
for c in Base64.Decodes(str) do
tindex = tindex + 1
temp[tindex] = c
if tindex == 256 then
index = index + 1
cache[index] = concat(temp)
tindex = 0
wipe(temp)
Continue()
end
end
if tindex > 0 then
index = index + 1
cache[index] = concat(temp)
wipe(temp)
end
local result = concat(cache)
_Recycle(wipe(cache))
_Recycle(temp)
return result
else
return Base64.Decode(str)
end
end
__Static__()
function Scorpio.DeflateEncode(str)
if coroutine.running() then
local index = 0
local cache = _Recycle()
for c in Deflate.Encodes(str, true) do
index = index + 1
cache[index] = c
Continue()
end
local result = concat(cache)
_Recycle(wipe(cache))
return result
else
return Deflate.Encode(str)
end
end
__Static__()
function Scorpio.DeflateDecode(str)
if coroutine.running() then
local index = 0
local cache = _Recycle()
for c in Deflate.Decodes(str) do
index = index + 1
cache[index] = c
Continue()
end
local result = concat(cache)
_Recycle(wipe(cache))
return result
else
return Deflate.Decode(str)
end
end