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 /xmake/core/base/bytes.lua | |
| parent | 226351fea82959c5f80bda68546411099e7b4074 (diff) | |
improve bytes
Diffstat (limited to 'xmake/core/base/bytes.lua')
| -rw-r--r-- | xmake/core/base/bytes.lua | 44 |
1 files changed, 41 insertions, 3 deletions
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) |
