.
This commit is contained in:
parent
176b8b32b0
commit
6fb6d3ba62
2 changed files with 34 additions and 9 deletions
34
extra.lua
34
extra.lua
|
@ -1,13 +1,13 @@
|
||||||
function strpad(num, count, pad)
|
local function strpad(num, count, pad)
|
||||||
num = tostring(num)
|
num = tostring(num)
|
||||||
return (pad:rep(count)..num):sub(#num)
|
return (pad:rep(count)..num):sub(#num)
|
||||||
end
|
end
|
||||||
|
|
||||||
function add_zeros(num, count)
|
local function add_zeros(num, count)
|
||||||
return strpad(num, count - 1, '0')
|
return strpad(num, count - 1, '0')
|
||||||
end
|
end
|
||||||
|
|
||||||
function mixed_sorter(a, b)
|
local function mixed_sorter(a, b)
|
||||||
a = type(a) == 'number' and add_zeros(a, 16) or tostring(a)
|
a = type(a) == 'number' and add_zeros(a, 16) or tostring(a)
|
||||||
b = type(b) == 'number' and add_zeros(b, 16) or tostring(b)
|
b = type(b) == 'number' and add_zeros(b, 16) or tostring(b)
|
||||||
return a < b
|
return a < b
|
||||||
|
@ -15,7 +15,7 @@ end
|
||||||
|
|
||||||
-- loosely based on http://lua-users.org/wiki/SortedIteration
|
-- loosely based on http://lua-users.org/wiki/SortedIteration
|
||||||
-- the original didn't make use of closures for who knows why
|
-- the original didn't make use of closures for who knows why
|
||||||
function order_keys(t)
|
local function order_keys(t)
|
||||||
local oi = {}
|
local oi = {}
|
||||||
for key in pairs(t) do
|
for key in pairs(t) do
|
||||||
table.insert(oi, key)
|
table.insert(oi, key)
|
||||||
|
@ -24,7 +24,7 @@ function order_keys(t)
|
||||||
return oi
|
return oi
|
||||||
end
|
end
|
||||||
|
|
||||||
function opairs(t, cache)
|
local function opairs(t, cache)
|
||||||
local oi = cache and cache[t] or order_keys(t)
|
local oi = cache and cache[t] or order_keys(t)
|
||||||
if cache then
|
if cache then
|
||||||
cache[t] = oi
|
cache[t] = oi
|
||||||
|
@ -36,3 +36,27 @@ function opairs(t, cache)
|
||||||
if key then return key, t[key] end
|
if key then return key, t[key] end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function traverse(path)
|
||||||
|
if not path then return end
|
||||||
|
local parent = _G
|
||||||
|
local key
|
||||||
|
for w in path:gfind("[%w_]+") do
|
||||||
|
if key then
|
||||||
|
parent = rawget(parent, key)
|
||||||
|
if type(parent) ~= 'table' then return end
|
||||||
|
end
|
||||||
|
key = w
|
||||||
|
end
|
||||||
|
if not key then return end
|
||||||
|
return {parent=parent, key=key}
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
strpad = strpad,
|
||||||
|
add_zeros = add_zeros,
|
||||||
|
mixed_sorter = mixed_sorter,
|
||||||
|
order_keys = order_keys,
|
||||||
|
opairs = opairs,
|
||||||
|
traverse = traverse,
|
||||||
|
}
|
||||||
|
|
9
pt.lua
9
pt.lua
|
@ -1,10 +1,11 @@
|
||||||
require 'extra'
|
local extra = require 'extra'
|
||||||
|
local opairs = extra.opairs
|
||||||
|
|
||||||
local pt = {}
|
local pt = {}
|
||||||
pt.__index = pt
|
pt.__index = pt
|
||||||
setmetatable(pt, pt)
|
setmetatable(pt, pt)
|
||||||
|
|
||||||
function rawstr(v)
|
local function rawstr(v)
|
||||||
if v == nil then return 'nil' end
|
if v == nil then return 'nil' end
|
||||||
local mt = getmetatable(v)
|
local mt = getmetatable(v)
|
||||||
local ts = mt and rawget(mt, '__tostring')
|
local ts = mt and rawget(mt, '__tostring')
|
||||||
|
@ -15,11 +16,11 @@ function rawstr(v)
|
||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
|
|
||||||
function getaddr(t)
|
local function getaddr(t)
|
||||||
return rawstr(t):sub(#type(t) + 3)
|
return rawstr(t):sub(#type(t) + 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
function copy(t)
|
local function copy(t)
|
||||||
-- shallow copy
|
-- shallow copy
|
||||||
if type(t) ~= 'table' then return end
|
if type(t) ~= 'table' then return end
|
||||||
local new = {}
|
local new = {}
|
||||||
|
|
Loading…
Add table
Reference in a new issue