You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
2.7 KiB
Lua
145 lines
2.7 KiB
Lua
-- https://github.com/mah0x211/lua-isa
|
|
|
|
-- constants
|
|
local INF_POS = math.huge;
|
|
local INF_NEG = -INF_POS;
|
|
local type = type;
|
|
local floor = math.floor;
|
|
|
|
-- type
|
|
local function isNil(arg)
|
|
return type(arg) == 'nil';
|
|
end
|
|
|
|
local function isBoolean(arg)
|
|
return type(arg) == 'boolean';
|
|
end
|
|
|
|
local function isString(arg)
|
|
return type(arg) == 'string';
|
|
end
|
|
|
|
local function isNumber(arg)
|
|
return type(arg) == 'number';
|
|
end
|
|
|
|
local function isFunction(arg)
|
|
return type(arg) == 'function';
|
|
end
|
|
|
|
local function isTable(arg)
|
|
return type(arg) == 'table';
|
|
end
|
|
|
|
local function isThread(arg)
|
|
return type(arg) == 'thread';
|
|
end
|
|
|
|
local function isUserdata(arg)
|
|
return type(arg) == 'userdata';
|
|
end
|
|
|
|
-- boolean
|
|
local function isTrue(arg)
|
|
return arg == true;
|
|
end
|
|
|
|
local function isFalse(arg)
|
|
return arg == false;
|
|
end
|
|
|
|
-- None
|
|
local function isNone(arg)
|
|
return arg == nil or arg == false or arg == 0 or arg == '' or arg ~= arg;
|
|
end
|
|
|
|
-- arithmetic
|
|
local function isNaN(arg)
|
|
return arg ~= arg;
|
|
end
|
|
|
|
-- integer
|
|
local function isFinite(arg)
|
|
return type(arg) == 'number' and (arg < INF_POS and arg > INF_NEG);
|
|
end
|
|
|
|
local function isInt(arg)
|
|
return isFinite(arg) and rawequal(floor(arg), arg);
|
|
end
|
|
|
|
local function isInt8(arg)
|
|
return isInt(arg) and arg >= -128 and arg <= 127;
|
|
end
|
|
|
|
local function isInt16(arg)
|
|
return isInt(arg) and arg >= -32768 and arg <= 32767;
|
|
end
|
|
|
|
local function isInt32(arg)
|
|
return isInt(arg) and arg >= -2147483648 and arg <= 2147483647;
|
|
end
|
|
|
|
-- unsigned integer
|
|
local function isUnsigned(arg)
|
|
return type(arg) == 'number' and (arg < INF_POS and arg >= 0);
|
|
end
|
|
|
|
local function isUInt(arg)
|
|
return isUnsigned(arg) and rawequal(floor(arg), arg);
|
|
end
|
|
|
|
local function isUInt8(arg)
|
|
return isUInt(arg) and arg <= 255;
|
|
end
|
|
|
|
local function isUInt16(arg)
|
|
return isUInt(arg) and arg <= 65535;
|
|
end
|
|
|
|
local function isUInt32(arg)
|
|
return isUInt(arg) and arg <= 4294967295;
|
|
end
|
|
|
|
local EXPORTS = {};
|
|
|
|
for k, v in pairs({
|
|
-- type
|
|
['Nil'] = isNil,
|
|
['Boolean'] = isBoolean,
|
|
['String'] = isString,
|
|
['Number'] = isNumber,
|
|
['Function'] = isFunction,
|
|
['Table'] = isTable,
|
|
['Thread'] = isThread,
|
|
['Userdata'] = isUserdata,
|
|
|
|
-- boolean
|
|
['True'] = isTrue,
|
|
['False'] = isFalse,
|
|
|
|
-- None: nil | false | 0 | '' | nan
|
|
['None'] = isNone,
|
|
|
|
-- arithmetic
|
|
-- NaN
|
|
['NaN'] = isNaN,
|
|
['Finite'] = isFinite,
|
|
|
|
-- integer
|
|
['Int'] = isInt,
|
|
['Int8'] = isInt8,
|
|
['Int16'] = isInt16,
|
|
['Int32'] = isInt32,
|
|
|
|
-- unsigned integer
|
|
['Unsigned'] = isUnsigned,
|
|
['UInt'] = isUInt,
|
|
['UInt8'] = isUInt8,
|
|
['UInt16'] = isUInt16,
|
|
['UInt32'] = isUInt32,
|
|
}) do
|
|
EXPORTS[k], EXPORTS[k:lower()] = v, v;
|
|
end
|
|
|
|
return EXPORTS;
|