在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
local tonumber_ = tonumber function tonumber(v, base) return tonumber_(v, base) or 0 end function toint(v) return math.round(tonumber(v)) end function tobool(v) return (v ~= nil and v ~= false) end function totable(v) if type(v) ~= "table" then v = {} end return v end function clone(object) local lookup_table = {} local function _copy(object) if type(object) ~= "table" then return object elseif lookup_table[object] then return lookup_table[object] end local new_table = {} lookup_table[object] = new_table for key, value in pairs(object) do new_table[_copy(key)] = _copy(value) end return setmetatable(new_table, getmetatable(object)) end return _copy(object) end function class(classname, super) local superType = type(super) local cls if superType ~= "function" and superType ~= "table" then superType = nil super = nil end if superType == "function" or (super and super.__ctype == 1) then -- inherited from native C++ Object cls = {} if superType == "table" then -- copy fields from super print ("superTyper is table"); for k,v in pairs(super) do cls[k] = v end cls.__create = super.__create cls.super = super else cls.__create = super cls.ctor = function() end end cls.__cname = classname cls.__ctype = 1 function cls.new(...) local instance = cls.__create(...) -- copy fields from class to native object for k,v in pairs(cls) do instance[k] = v end instance.class = cls instance:ctor(...) return instance end else -- inherited from Lua Object if super then cls = {} setmetatable(cls, {__index = super}) cls.super = super else cls = {ctor = function() end} end cls.__cname = classname cls.__ctype = 2 -- lua cls.__index = cls function cls.new(...) local instance = setmetatable({}, cls) instance.class = cls instance:ctor(...) return instance end end return cls end function import(moduleName, currentModuleName) local currentModuleNameParts local moduleFullName = moduleName local offset = 1 while true do if string.byte(moduleName, offset) ~= 46 then -- . moduleFullName = string.sub(moduleName, offset) if currentModuleNameParts and #currentModuleNameParts > 0 then moduleFullName = table.concat(currentModuleNameParts, ".") .. "." .. moduleFullName end break end offset = offset + 1 if not currentModuleNameParts then if not currentModuleName then local n,v = debug.getlocal(3, 1) currentModuleName = v end currentModuleNameParts = string.split(currentModuleName, ".") end table.remove(currentModuleNameParts, #currentModuleNameParts) end return require(moduleFullName) end function handler(target, method) return function(...) return method(target, ...) end end function math.round(num) return math.floor(num + 0.5) end function io.exists(path) local file = io.open(path, "r") if file then io.close(file) return true end return false end function io.readfile(path) local file = io.open(path, "r") if file then local content = file:read("*a") io.close(file) return content end return nil end function io.writefile(path, content, mode) mode = mode or "w+b" local file = io.open(path, mode) if file then print("file is ok ok ok ok ok ") if file:write(content) == nil then print("file is bad bad bad bad ") return false end io.close(file) return true else return false end end function io.pathinfo(path) local pos = string.len(path) local extpos = pos + 1 while pos > 0 do local b = string.byte(path, pos) if b == 46 then -- 46 = char "." extpos = pos elseif b == 47 then -- 47 = char "/" break end pos = pos - 1 end local dirname = string.sub(path, 1, pos) local filename = string.sub(path, pos + 1) extpos = extpos - pos local basename = string.sub(filename, 1, extpos - 1) local extname = string.sub(filename, extpos) return { dirname = dirname, filename = filename, basename = basename, extname = extname } end function io.filesize(path) local size = false local file = io.open(path, "r") if file then local current = file:seek() size = file:seek("end") file:seek("set", current) io.close(file) end return size end function table.nums(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end function table.keys(t) local keys = {} if t == nil then return keys; end for k, v in pairs(t) do keys[#keys + 1] = k end return keys end function table.values(t) local values = {} if t == nil then return values; end for k, v in pairs(t) do values[#values + 1] = v end return values end function table.containKey( t, key ) for k, v in pairs(t) do if key == k then return true; end end return false; end function table.containValue( t, value ) for k, v in pairs(t) do if value == v then return true; end end return false; end function table.getKeyByValue( t, value ) for k, v in pairs(t) do if value == v then return k; end end end function table.merge(dest, src) for k, v in pairs(src) do dest[k] = v end end function arrayContain( array, value) for i=1,#array do if array[i] == value then return true; end end return false; end function string.htmlspecialchars(input) for k, v in pairs(string._htmlspecialchars_set) do input = string.gsub(input, k, v) end return input end string._htmlspecialchars_set = {} string._htmlspecialchars_set["&"] = "&" string._htmlspecialchars_set["\""] = """ string._htmlspecialchars_set["'"] = "'" string._htmlspecialchars_set["<"] = "<" string._htmlspecialchars_set[">"] = ">" function string.nl2br(input) return string.gsub(input, "\n", "<br />") end function string.text2html(input) input = string.gsub(input, "\t", " ") input = string.htmlspecialchars(input) input = string.gsub(input, " ", " ") input = string.nl2br(input) return input end function string.split(str, delimiter) if (delimiter=='') then return false end local pos,arr = 0, {} -- for each divider found for st,sp in function() return string.find(str, delimiter, pos, true) end do table.insert(arr, string.sub(str, pos, st - 1)) pos = sp + 1 end table.insert(arr, string.sub(str, pos)) return arr end function string.ltrim(str) return string.gsub(str, "^[ \t\n\r]+", "") end function string.rtrim(str) return string.gsub(str, "[ \t\n\r]+$", "") end function string.trim(str) str = string.gsub(str, "^[ \t\n\r]+", "") return string.gsub(str, "[ \t\n\r]+$", "") end function string.ucfirst(str) return string.upper(string.sub(str, 1, 1)) .. string.sub(str, 2) end --[[-- @ignore ]] local function urlencodeChar(char) return "%" .. string.format("%02X", string.byte(c)) end function string.urlencode(str) -- convert line endings str = string.gsub(tostring(str), "\n", "\r\n") -- escape all characters but alphanumeric, '.' and '-' str = string.gsub(str, "([^%w%.%- ])", urlencodeChar) -- convert spaces to "+" symbols return string.gsub(str, " ", "+") end function string.utf8len(str) local len = #str local left = len local cnt = 0 local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc} while left ~= 0 do local tmp = string.byte(str, -left) local i = #arr while arr[i] do if tmp >= arr[i] then left = left - i break end i = i - 1 end cnt = cnt + 1 end return cnt end function string.formatNumberThousands(num) local formatted = tostring(tonumber(num)) local k while true do formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') if k == 0 then break end end return formatted end function print_lua_table (lua_table, indent) indent = indent or 0 for k, v in pairs(lua_table) do if type(k) == "string" then k = string.format("%q", k) end local szSuffix = "" if type(v) == "table" then szSuffix = "{" end local szPrefix = string.rep(" ", indent) formatting = szPrefix.."["..k.."]".." = "..szSuffix if type(v) == "table" then print(formatting) print_lua_table(v, indent + 1) print(szPrefix.."},") else local szValue = "" if type(v) == "string" then szValue = string.format("%q", v) else szValue = tostring(v) end print(formatting..szValue..",") end end end local function newCounter() local i = 0 return function() -- anonymous function i = i + 1 return i end end g_id_generator = newCounter() function getNextID() local nextID nextID = g_id_generator() return nextID end luautil = {}; function luautil.serialize(tName, t, sort_parent, sort_child) local mark={} local assign={} local function ser_table(tbl,parent) mark[tbl]=parent local tmp={} local sortList = {}; for k,v in pairs(tbl) do sortList[#sortList + 1] = {key=k, value=v}; end if tostring(parent) == "ret" then if sort_parent then table.sort(sortList, sort_parent); end else if sort_child then table.sort(sortList, sort_child); end end for i = 1, #sortList do local info = sortList[i]; local k = info.key; local v = info.value; local key= type(k)=="number" and "["..k.."]" or k; if type(v)=="table" then local dotkey= parent..(type(k)=="number" and key or "."..key) if mark[v] then table.insert(assign, "\n".. dotkey.."="..mark[v]) else table.insert(tmp, "\n"..key.."="..ser_table(v,dotkey)) end else if type(v) == "string" then table.insert(tmp, "\n".. key..'="'..v..'"'); else table.insert(tmp, "\n".. key.."="..tostring(v) .. "\n"); end end end return "{"..table.concat(tmp,",").."\n}"; end return "do local ".. tName .. "= \n\n"..ser_table(t, tName)..table.concat(assign," ").."\n\n return ".. tName .. " end" end function luautil.split(str, delimiter) if (delimiter=='') then return false end local pos,arr = 0, {} -- for each divider found for st,sp in function() return string.find(str, delimiter, pos, true) end do |
请发表评论