Last active
March 2, 2017 13:18
-
-
Save SwadicalRag/2ff9f46b1d9a182ebab2b23a84edb075 to your computer and use it in GitHub Desktop.
simple vararg lib
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local unpack = unpack or table.unpack | |
local select = select | |
local varg_internal_meta = {} | |
local varg = setmetatable({},varg_internal_meta) | |
varg.meta = {} | |
varg.meta.__index = varg.meta | |
function varg.meta:Unpack(from,to) | |
return unpack(self.value,from or 1,to or self.len) | |
end | |
function varg.meta:Copy() | |
return varg.create(self:Unpack()) | |
end | |
function varg.meta:__tostring() | |
return string.format( | |
"Vararg [%d args]", | |
self.len | |
) | |
end | |
function varg.meta:__len() | |
return self.len | |
end | |
function varg.meta:__concat(varg2) | |
return varg.join(self,varg2) | |
end | |
function varg.meta:__add(varg2) | |
return varg.join(self,varg2) | |
end | |
function varg.join(varg1,varg2) | |
local varg3 = varg1:Copy() | |
varg3.len = varg1.len + varg2.len | |
for i=1,varg2.len do | |
varg3.value[varg1.len + i] = varg2.value[i] | |
end | |
return varg3 | |
end | |
function varg.create(...) | |
return setmetatable({ | |
value = {...}, | |
len = select("#",...), | |
},varg.meta) | |
end | |
function varg_internal_meta:__call(...) | |
return varg.create(...) | |
end | |
return varg |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment