summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-07 22:49:14 +0800
committerruki <[email protected]>2022-04-07 22:49:14 +0800
commitd9c1d3f8c9eaf1a92f7ab4d720491b5f239c5535 (patch)
treedcb0b13022e256bb36e70472a05196cf70e3384e
parent226351fea82959c5f80bda68546411099e7b4074 (diff)
improve bytes
-rw-r--r--tests/modules/bytes/test.lua9
-rw-r--r--xmake/core/base/bytes.lua44
-rw-r--r--xmake/modules/private/service/stream.lua2
3 files changed, 52 insertions, 3 deletions
diff --git a/tests/modules/bytes/test.lua b/tests/modules/bytes/test.lua
index ef450ebce..b406035eb 100644
--- a/tests/modules/bytes/test.lua
+++ b/tests/modules/bytes/test.lua
@@ -52,3 +52,12 @@ function test_move(t)
t:are_equal(bytes(9):copy("123456789"):move2(2, 5, 9):str(), "156789789")
end
+function test_int(t)
+ t:are_equal(bytes(1):u8_set(1, 1):u8(1), 1)
+ t:are_equal(bytes(10):u8_set(5, 255):u8(5), 255)
+ t:are_equal(bytes(10):u16le_set(5, 12346):u16le(5), 12346)
+ t:are_equal(bytes(10):u16be_set(5, 12346):u16be(5), 12346)
+ t:are_equal(bytes(20):u32le_set(5, 12345678):u32le(5), 12345678)
+ t:are_equal(bytes(20):u32be_set(5, 12345678):u32be(5), 12345678)
+end
+
diff --git a/xmake/core/base/bytes.lua b/xmake/core/base/bytes.lua
index b9aa748f2..f26301492 100644
--- a/xmake/core/base/bytes.lua
+++ b/xmake/core/base/bytes.lua
@@ -419,6 +419,12 @@ function _instance:u8(offset)
return self[offset]
end
+-- set uint8 value
+function _instance:u8_set(offset, value)
+ self[offset] = value
+ return self
+end
+
-- get sint8 value
function _instance:s8(offset)
local value = self[offset]
@@ -430,11 +436,25 @@ function _instance:u16le(offset)
return bit.lshift(self[offset + 1], 8) + self[offset]
end
+-- set uint16 little-endian value
+function _instance:u16le_set(offset, value)
+ self[offset + 1] = bit.rshift(value, 8)
+ self[offset] = bit.band(value, 0xff)
+ return self
+end
+
-- get uint16 big-endian value
function _instance:u16be(offset)
return bit.lshift(self[offset], 8) + self[offset + 1]
end
+-- set uint16 big-endian value
+function _instance:u16be_set(offset, value)
+ self[offset] = bit.rshift(value, 8)
+ self[offset + 1] = bit.band(value, 0xff)
+ return self
+end
+
-- get sint16 little-endian value
function _instance:s16le(offset)
local value = self:u16le(offset)
@@ -449,12 +469,30 @@ end
-- get uint32 little-endian value
function _instance:u32le(offset)
- return self[offset + 3] * 0x1000000 + bit.lshift(self[offset + 2], 16) + bit.lshift(self[offset + 1], 8) + self[offset]
+ return bit.lshift(self[offset + 3], 24) + bit.lshift(self[offset + 2], 16) + bit.lshift(self[offset + 1], 8) + self[offset]
+end
+
+-- set uint32 little-endian value
+function _instance:u32le_set(offset, value)
+ self[offset + 3] = bit.band(bit.rshift(value, 24), 0xff)
+ self[offset + 2] = bit.band(bit.rshift(value, 16), 0xff)
+ self[offset + 1] = bit.band(bit.rshift(value, 8), 0xff)
+ self[offset] = bit.band(value, 0xff)
+ return self
end
-- get uint32 big-endian value
function _instance:u32be(offset)
- return self[offset] * 0x1000000 + bit.lshift(self[offset + 1], 16) + bit.lshift(self[offset + 2], 8) + self[offset + 3]
+ return bit.lshift(self[offset], 24) + bit.lshift(self[offset + 1], 16) + bit.lshift(self[offset + 2], 8) + self[offset + 3]
+end
+
+-- set uint32 big-endian value
+function _instance:u32be_set(offset, value)
+ self[offset] = bit.band(bit.rshift(value, 24), 0xff)
+ self[offset + 1] = bit.band(bit.rshift(value, 16), 0xff)
+ self[offset + 2] = bit.band(bit.rshift(value, 8), 0xff)
+ self[offset + 3] = bit.band(value, 0xff)
+ return self
end
-- get sint32 little-endian value
@@ -502,7 +540,7 @@ function _instance:__newindex(key, value)
return
elseif type(key) == "table" then
local start, last = key[1], key[2]
- self:slice(start,last):copy(value)
+ self:slice(start, last):copy(value)
return
end
rawset(self, key, value)
diff --git a/xmake/modules/private/service/stream.lua b/xmake/modules/private/service/stream.lua
index bda7aa2c0..fc1910f96 100644
--- a/xmake/modules/private/service/stream.lua
+++ b/xmake/modules/private/service/stream.lua
@@ -30,6 +30,8 @@ function stream:init(sock)
self._SOCK = sock
self._RCACHE = bytes(8192)
self._RCACHE_SIZE = 0
+ self._WCACHE = bytes(8192)
+ self._WCACHE_SIZE = 0
self._RECVBUFF = bytes(65536)
end