Difference between revisions of "Module:TableTools"

Jump to navigation Jump to search
add type checking
en>Mr. Stradivarius
(add a size function)
en>Mr. Stradivarius
(add type checking)
Line 8: Line 8:
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
--]]
--]]
local libraryUtil = require('libraryUtil')


local p = {}
local p = {}
Line 14: Line 16:
local floor = math.floor
local floor = math.floor
local infinity = math.huge
local infinity = math.huge
local checkType = libraryUtil.checkType


-- Define a unique value to represent NaN. This is because NaN cannot be used as a table key.
-- Define a unique value to represent NaN. This is because NaN cannot be used as a table key.
Line 49: Line 52:
for i = 1, select('#', ...) do
for i = 1, select('#', ...) do
local t = select(i, ...)
local t = select(i, ...)
checkType('union', i, t, 'table')
for k, v in pairs(t) do
for k, v in pairs(t) do
local retKey = ret[k]
local retKey = ret[k]
Line 90: Line 94:
for i = 1, select('#', ...) do
for i = 1, select('#', ...) do
local t = select(i, ...)
local t = select(i, ...)
checkType('valueUnion', i, t, 'table')
for k, v in pairs(t) do
for k, v in pairs(t) do
if type(v) == 'number' and tostring(v) == '-nan' then
if type(v) == 'number' and tostring(v) == '-nan' then
Line 121: Line 126:
for i = 1, lim do
for i = 1, lim do
local t = select(i, ...)
local t = select(i, ...)
checkType('intersection', i, t, 'table')
for k, v in pairs(t) do
for k, v in pairs(t) do
local trackVal = track[k]
local trackVal = track[k]
Line 153: Line 159:
for i = 1, lim do
for i = 1, lim do
local t = select(i, ...)
local t = select(i, ...)
checkType('valueIntersection', i, t, 'table')
for k, v in pairs(t) do
for k, v in pairs(t) do
if type(v) == 'number' and tostring(v) == '-nan' then
if type(v) == 'number' and tostring(v) == '-nan' then
Line 183: Line 190:
--]]
--]]
function p.numKeys(t)
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local isPositiveInteger = p.isPositiveInteger
local nums = {}
local nums = {}
Line 205: Line 213:
--]]
--]]
function p.affixNums(t, prefix, suffix)
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
prefix = prefix or ''
prefix = prefix or ''
suffix = suffix or ''
suffix = suffix or ''
Line 231: Line 240:
--]]
--]]
function p.compressSparseArray(t)
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local ret = {}
local nums = p.numKeys(t)
local nums = p.numKeys(t)
Line 248: Line 258:
--]]
--]]
function p.sparseIpairs(t)
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local nums = p.numKeys(t)
local i = 0
local i = 0
Line 269: Line 280:
--]]
--]]
function p.size(t)
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
local i = 0
for k in pairs(t) do
for k in pairs(t) do
Anonymous user

Navigation menu