/branches/zhTW_201107/Aloft/Libs/AceSerializer-3.0
-- make into AceSerializer. |
-- @class file |
-- @name AceSerializer-3.0 |
-- @release $Id: AceSerializer-3.0.lua 910 2010-02-11 21:54:24Z mikk $ |
local MAJOR,MINOR = "AceSerializer-3.0", 3 |
-- @release $Id: AceSerializer-3.0.lua 1038 2011-10-03 01:39:58Z mikk $ |
local MAJOR,MINOR = "AceSerializer-3.0", 4 |
local AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
if not AceSerializer then return end |
local tconcat = table.concat |
-- quick copies of string representations of wonky numbers |
local serNaN = tostring(0/0) |
local serInf = tostring(1/0) |
local serNegInf = tostring(-1/0) |
local inf = math.huge |
local serNaN -- can't do this in 4.3, see ace3 ticket 268 |
local serInf = tostring(inf) |
local serNegInf = tostring(-inf) |
-- Serialization functions |
local function SerializeStringHelper(ch) -- Used by SerializeValue for strings |
elseif t=="number" then -- ^N = number (just tostring()ed) or ^F (float components) |
local str = tostring(v) |
if tonumber(str)==v or str==serNaN or str==serInf or str==serNegInf then |
if tonumber(str)==v --[[not in 4.3 or str==serNaN]] or str==serInf or str==serNegInf then |
-- translates just fine, transmit as-is |
res[nres+1] = "^N" |
res[nres+2] = str |
end |
local function DeserializeNumberHelper(number) |
if number == serNaN then |
--[[ not in 4.3 if number == serNaN then |
return 0/0 |
elseif number == serNegInf then |
return -1/0 |
else]]if number == serNegInf then |
return -inf |
elseif number == serInf then |
return 1/0 |
return inf |
else |
return tonumber(number) |
end |