-- 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;