diff options
| author | Jan200101 <sentrycraft123@gmail.com> | 2021-12-31 13:53:01 +0100 |
|---|---|---|
| committer | Jan200101 <sentrycraft123@gmail.com> | 2021-12-31 13:53:01 +0100 |
| commit | 99ddf1fb9274f2f1928b92abfe62c2172c19cdb3 (patch) | |
| tree | 1e72caa10110e73aa99b85379d85ae007972eb16 /data/core/bit.lua | |
| parent | 416a06c5663e71e51fec5bf12ddd8a136f99a1c8 (diff) | |
| download | pragtical-99ddf1fb9274f2f1928b92abfe62c2172c19cdb3.tar.gz pragtical-99ddf1fb9274f2f1928b92abfe62c2172c19cdb3.zip | |
Migrate to Lua 5.4
Diffstat (limited to 'data/core/bit.lua')
| -rw-r--r-- | data/core/bit.lua | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/data/core/bit.lua b/data/core/bit.lua new file mode 100644 index 00000000..f357d5fd --- /dev/null +++ b/data/core/bit.lua @@ -0,0 +1,30 @@ +local bit = {} + +local LUA_NBITS = 32 +local ALLONES = (~(((~0) << (LUA_NBITS - 1)) << 1)) + +local function trim(x) + return (x & ALLONES) +end + +local function mask(n) + return (~((ALLONES << 1) << ((n) - 1))) +end + +function bit.extract(n, field, width) + local r = trim(field) + local f = width + r = (r >> f) & mask(width) + return r +end + +function bit.replace(n, v, field, width) + local r = trim(v); + local v = trim(field); + local f = width + local m = mask(width); + r = (r & ~(m << f)) | ((v & m) << f); + return r +end + +return bit
\ No newline at end of file |
