diff options
| author | ruki <[email protected]> | 2022-04-07 22:49:14 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-07 22:49:14 +0800 |
| commit | d9c1d3f8c9eaf1a92f7ab4d720491b5f239c5535 (patch) | |
| tree | dcb0b13022e256bb36e70472a05196cf70e3384e | |
| parent | 226351fea82959c5f80bda68546411099e7b4074 (diff) | |
improve bytes
| -rw-r--r-- | tests/modules/bytes/test.lua | 9 | ||||
| -rw-r--r-- | xmake/core/base/bytes.lua | 44 | ||||
| -rw-r--r-- | xmake/modules/private/service/stream.lua | 2 |
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 |
