97 lines
1.8 KiB
Lua
97 lines
1.8 KiB
Lua
local Reference = {}
|
|
local metatable = {
|
|
__index = Reference,
|
|
__tostring = function( r )
|
|
return tostring( r.t[ r.k ] )
|
|
end,
|
|
__add = function( r, v )
|
|
return r.t[ r.k ] + v
|
|
end,
|
|
__sub = function( r, v )
|
|
return r.t[ r.k ] - v
|
|
end,
|
|
__mul = function( r, v )
|
|
return r.t[ r.k ] * v
|
|
end,
|
|
__div = function( r, v )
|
|
return r.t[ r.k ] / v
|
|
end,
|
|
__mod = function( r, v )
|
|
return math.fmod( r.t[ r.k ], v )
|
|
end,
|
|
__pow = function( r, v )
|
|
return r.t[ r.k ] ^ v
|
|
end,
|
|
__unm = function( r )
|
|
return -r.t[ r.k ]
|
|
end,
|
|
__eq = function( r, v )
|
|
return r.t[ r.k ] == v
|
|
end,
|
|
__len = function( r )
|
|
return #r.t[ r.k ]
|
|
end,
|
|
__lt = function( r, v )
|
|
return r.t[ r.k ] < v
|
|
end,
|
|
__le = function( r, v )
|
|
return r.t[ r.k ] <= v
|
|
end,
|
|
__concat = function( a, b )
|
|
return tostring( a )..tostring( b )
|
|
end,
|
|
__call = function( r, ... )
|
|
return r.t[ r.k ]( ... )
|
|
end,
|
|
}
|
|
|
|
-- Table and key. Note that k should be name of the variable so the type must be string.
|
|
function Reference:new( t, k )
|
|
local object = setmetatable( {}, metatable )
|
|
|
|
object.t = t
|
|
object.k = k
|
|
|
|
return object
|
|
end
|
|
|
|
-- Set new reference. Table and key. Note that k should be name of the variable so the type must be string.
|
|
function Reference:ref( t, k )
|
|
self.t = t
|
|
self.k = k
|
|
end
|
|
|
|
function Reference:set( v )
|
|
self.t[ self.k ] = v
|
|
end
|
|
|
|
function Reference:get()
|
|
return self.t[ self.k ]
|
|
end
|
|
|
|
function Reference:unpack()
|
|
return self.t, self.k
|
|
end
|
|
|
|
function Reference:clone()
|
|
return Reference:new( self.t, self.k )
|
|
end
|
|
|
|
function Reference:addEq( v )
|
|
self.t[ self.k ] = self.t[ self.k ] + v
|
|
end
|
|
|
|
function Reference:subEq( v )
|
|
self.t[ self.k ] = self.t[ self.k ] - v
|
|
end
|
|
|
|
function Reference:mulEq( v )
|
|
self.t[ self.k ] = self.t[ self.k ] * v
|
|
end
|
|
|
|
function Reference:divEq( v )
|
|
self.t[ self.k ] = self.t[ self.k ] / v
|
|
end
|
|
|
|
return Reference
|