1if not modules then modules = { } end modules ['l-bit32'] = {
2 version = 1.001,
3 license = "the same as regular Lua",
4 source = "bitwise.lua, v 1.24 2014/12/26 17:20:53 roberto",
5 comment = "drop-in for bit32, adapted a bit by Hans Hagen",
6
7}
8
9if bit32 then
10 return
11end
12
13local select = select
14
15bit32 = {
16
17 bnot = function (a)
18 return ~a & 0xFFFFFFFF
19 end,
20
21 band = function (x, y, z, ...)
22 if not z then
23 return ((x or -1) & (y or -1)) & 0xFFFFFFFF
24 else
25 local res = x & y & z
26 for i=1,select("#",...) do
27 res = res & select(i,...)
28 end
29 return res & 0xFFFFFFFF
30 end
31 end,
32
33 bor = function (x, y, z, ...)
34 if not z then
35 return ((x or 0) | (y or 0)) & 0xFFFFFFFF
36 else
37 local res = x | y | z
38 for i=1,select("#",...) do
39 res = res | select(i,...)
40 end
41 return res & 0xFFFFFFFF
42 end
43 end,
44
45 bxor = function (x, y, z, ...)
46 if not z then
47 return ((x or 0) ~ (y or 0)) & 0xFFFFFFFF
48 else
49 local res = x ~ y ~ z
50 for i=1,select("#",...) do
51 res = res ~ select(i,...)
52 end
53 return res & 0xFFFFFFFF
54 end
55 end,
56
57 btest = function (x, y, z, ...)
58 if not z then
59 return (((x or -1) & (y or -1)) & 0xFFFFFFFF) ~= 0
60 else
61 local res = x & y & z
62 for i=1,select("#",...) do
63 res = res & select(i,...)
64 end
65 return (res & 0xFFFFFFFF) ~= 0
66 end
67 end,
68
69 lshift = function (a, b)
70 return ((a & 0xFFFFFFFF) << b) & 0xFFFFFFFF
71 end,
72
73 rshift = function (a, b)
74 return ((a & 0xFFFFFFFF) >> b) & 0xFFFFFFFF
75 end,
76
77 arshift = function (a, b)
78 a = a & 0xFFFFFFFF
79 if b <= 0 or (a & 0x80000000) == 0 then
80 return (a >> b) & 0xFFFFFFFF
81 else
82 return ((a >> b) | ~(0xFFFFFFFF >> b)) & 0xFFFFFFFF
83 end
84 end,
85
86 lrotate = function (a ,b)
87 b = b & 31
88 a = a & 0xFFFFFFFF
89 a = (a << b) | (a >> (32 - b))
90 return a & 0xFFFFFFFF
91 end,
92
93 rrotate = function (a, b)
94 b = -b & 31
95 a = a & 0xFFFFFFFF
96 a = (a << b) | (a >> (32 - b))
97 return a & 0xFFFFFFFF
98 end,
99
100 extract = function (a, f, w)
101 return (a >> f) & ~(-1 << (w or 1))
102 end,
103
104 replace = function (a, v, f, w)
105 local mask = ~(-1 << (w or 1))
106 return ((a & ~(mask << f)) | ((v & mask) << f)) & 0xFFFFFFFF
107 end,
108
109}
110 |