aboutsummaryrefslogtreecommitdiff
path: root/data/core/bit.lua
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2021-12-31 13:53:01 +0100
committerJan200101 <sentrycraft123@gmail.com>2021-12-31 13:53:01 +0100
commit99ddf1fb9274f2f1928b92abfe62c2172c19cdb3 (patch)
tree1e72caa10110e73aa99b85379d85ae007972eb16 /data/core/bit.lua
parent416a06c5663e71e51fec5bf12ddd8a136f99a1c8 (diff)
downloadpragtical-99ddf1fb9274f2f1928b92abfe62c2172c19cdb3.tar.gz
pragtical-99ddf1fb9274f2f1928b92abfe62c2172c19cdb3.zip
Migrate to Lua 5.4
Diffstat (limited to 'data/core/bit.lua')
-rw-r--r--data/core/bit.lua30
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