mirror of
https://github.com/imezx/Warp.git
synced 2026-03-18 00:44:16 +00:00
rewrite(phase2): fix wU16 & experiment a cached machanism
This commit is contained in:
parent
3d32c4c87f
commit
04216ce24b
1 changed files with 17 additions and 6 deletions
|
|
@ -163,7 +163,7 @@ end
|
|||
|
||||
local function wU16(w: Writer, v: number)
|
||||
ensureSpace(w, 2)
|
||||
buffer.writei16(w.buf, w.cursor, v)
|
||||
buffer.writeu16(w.buf, w.cursor, v)
|
||||
w.cursor += 2
|
||||
end
|
||||
|
||||
|
|
@ -210,6 +210,7 @@ local function wString(w: Writer, s: string)
|
|||
end
|
||||
|
||||
local packValue: (w: Writer, v: any) -> ()
|
||||
local F32_TEST_BUF = buffer.create(4)
|
||||
|
||||
local function packNumber(w: Writer, n: number)
|
||||
if n ~= n then
|
||||
|
|
@ -267,9 +268,8 @@ local function packNumber(w: Writer, n: number)
|
|||
end
|
||||
else
|
||||
-- float: try f32 first
|
||||
local testBuf = buffer.create(4)
|
||||
buffer.writef32(testBuf, 0, n)
|
||||
local f32Val = buffer.readf32(testBuf, 0)
|
||||
buffer.writef32(F32_TEST_BUF, 0, n)
|
||||
local f32Val = buffer.readf32(F32_TEST_BUF, 0)
|
||||
|
||||
if f32Val == n or math.abs(n - f32Val) < math.abs(n) * 1e-6 then
|
||||
wByte(w, T_F32)
|
||||
|
|
@ -1262,13 +1262,24 @@ local function compileReader(s: SchemaType): (buffer, number, { any }?) -> (any,
|
|||
end
|
||||
end
|
||||
|
||||
local packerCache = setmetatable({}, { __mode = "k" })
|
||||
local readerCache = setmetatable({}, { __mode = "k" })
|
||||
|
||||
local function packStrict(w: Writer, s: SchemaType, v: any)
|
||||
local packer = compilePacker(s)
|
||||
local packer = packerCache[s]
|
||||
if not packer then
|
||||
packer = compilePacker(s)
|
||||
packerCache[s] = packer
|
||||
end
|
||||
packer(w, v)
|
||||
end
|
||||
|
||||
local function readStrict(buf: buffer, cursor: number, s: SchemaType, refs: { any }?): (any, number)
|
||||
local reader = compileReader(s)
|
||||
local reader = readerCache[s]
|
||||
if not reader then
|
||||
reader = compileReader(s)
|
||||
readerCache[s] = reader
|
||||
end
|
||||
return reader(buf, cursor, refs)
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue