mirror of
https://github.com/rayaman/multi.git
synced 2026-09-05 07:27:35 -04:00
Updated to 1.10.0!
Check changes.md for what was done
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
--[[
|
||||
LZW String Compression demo for Gideros
|
||||
This code is MIT licensed, see http://www.opensource.org/licenses/mit-license.php
|
||||
(C) 2013 - Guava7
|
||||
]]
|
||||
CLZWCompression = {}
|
||||
function CLZWCompression:InitDictionary(isEncode)
|
||||
self.mDictionary = {}
|
||||
-- local s = " !#$%&'\"()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
|
||||
local s={}
|
||||
for i=1,255 do
|
||||
s[#s+1]=string.char(i)
|
||||
end
|
||||
s=table.concat(s)
|
||||
local len = #s
|
||||
for i = 1, len do
|
||||
if isEncode then
|
||||
self.mDictionary[s:sub(i, i)] = i
|
||||
else
|
||||
self.mDictionary[i] = s:sub(i, i)
|
||||
end
|
||||
end
|
||||
self.mDictionaryLen = len
|
||||
end
|
||||
function CLZWCompression:Encode(sInput)
|
||||
self:InitDictionary(true)
|
||||
local s = ""
|
||||
local ch
|
||||
local len = #sInput
|
||||
local result = {}
|
||||
local dic = self.mDictionary
|
||||
local temp
|
||||
for i = 1, len do
|
||||
ch = sInput:sub(i, i)
|
||||
temp = s..ch
|
||||
if dic[temp] then
|
||||
s = temp
|
||||
else
|
||||
result[#result + 1] = dic[s]
|
||||
self.mDictionaryLen = self.mDictionaryLen + 1
|
||||
dic[temp] = self.mDictionaryLen
|
||||
s = ch
|
||||
end
|
||||
end
|
||||
result[#result + 1] = dic[s]
|
||||
return result
|
||||
end
|
||||
function CLZWCompression:Decode(data)
|
||||
self:InitDictionary(false)
|
||||
local dic = self.mDictionary
|
||||
local entry
|
||||
local ch
|
||||
local prevCode, currCode
|
||||
local result = {}
|
||||
prevCode = data[1]
|
||||
result[#result + 1] = dic[prevCode]
|
||||
for i = 2, #data do
|
||||
currCode = data[i]
|
||||
entry = dic[currCode]
|
||||
if entry then
|
||||
ch = entry:sub(1, 1)
|
||||
result[#result + 1] = entry
|
||||
else
|
||||
ch = dic[prevCode]:sub(1, 1)
|
||||
result[#result + 1] = dic[prevCode]..ch
|
||||
end
|
||||
dic[#dic + 1] = dic[prevCode]..ch
|
||||
prevCode = currCode
|
||||
end
|
||||
return table.concat(result)
|
||||
end
|
||||
|
||||
return CLZWCompression
|
||||
Reference in New Issue
Block a user