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
9
10
11
12
13
14
15if bit32 then
16
17
18
19elseif utf8 then
20
21
22
23 load ( [[
24local select = select -- instead of: arg = { ... }
25
26bit32 = {
27 bnot = function (a)
28 return ~a & 0xFFFFFFFF
29 end,
30 band = function (x, y, z, ...)
31 if not z then
32 return ((x or -1) & (y or -1)) & 0xFFFFFFFF
33 else
34 local res = x & y & z
35 for i=1,select("#",...) do
36 res = res & select(i,...)
37 end
38 return res & 0xFFFFFFFF
39 end
40 end,
41 bor = function (x, y, z, ...)
42 if not z then
43 return ((x or 0) | (y or 0)) & 0xFFFFFFFF
44 else
45 local res = x | y | z
46 for i=1,select("#",...) do
47 res = res | select(i,...)
48 end
49 return res & 0xFFFFFFFF
50 end
51 end,
52 bxor = function (x, y, z, ...)
53 if not z then
54 return ((x or 0) ~ (y or 0)) & 0xFFFFFFFF
55 else
56 local res = x ~ y ~ z
57 for i=1,select("#",...) do
58 res = res ~ select(i,...)
59 end
60 return res & 0xFFFFFFFF
61 end
62 end,
63 btest = function (x, y, z, ...)
64 if not z then
65 return (((x or -1) & (y or -1)) & 0xFFFFFFFF) ~= 0
66 else
67 local res = x & y & z
68 for i=1,select("#",...) do
69 res = res & select(i,...)
70 end
71 return (res & 0xFFFFFFFF) ~= 0
72 end
73 end,
74 lshift = function (a, b)
75 return ((a & 0xFFFFFFFF) << b) & 0xFFFFFFFF
76 end,
77 rshift = function (a, b)
78 return ((a & 0xFFFFFFFF) >> b) & 0xFFFFFFFF
79 end,
80 arshift = function (a, b)
81 a = a & 0xFFFFFFFF
82 if b <= 0 or (a & 0x80000000) == 0 then
83 return (a >> b) & 0xFFFFFFFF
84 else
85 return ((a >> b) | ~(0xFFFFFFFF >> b)) & 0xFFFFFFFF
86 end
87 end,
88 lrotate = function (a ,b)
89 b = b & 31
90 a = a & 0xFFFFFFFF
91 a = (a << b) | (a >> (32 - b))
92 return a & 0xFFFFFFFF
93 end,
94 rrotate = function (a, b)
95 b = -b & 31
96 a = a & 0xFFFFFFFF
97 a = (a << b) | (a >> (32 - b))
98 return a & 0xFFFFFFFF
99 end,
100 extract = function (a, f, w)
101 return (a >> f) & ~(-1 << (w or 1))
102 end,
103 replace = function (a, v, f, w)
104 local mask = ~(-1 << (w or 1))
105 return ((a & ~(mask << f)) | ((v & mask) << f)) & 0xFFFFFFFF
106 end,
107}
108 ]] ) ()
109
110elseif bit then
111
112
113
114 load ( [[
115local band, bnot, rshift, lshift = bit.band, bit.bnot, bit.rshift, bit.lshift
116
117bit32 = {
118 arshift = bit.arshift,
119 band = band,
120 bnot = bnot,
121 bor = bit.bor,
122 bxor = bit.bxor,
123 btest = function(...)
124 return band(...) ~= 0
125 end,
126 extract = function(a,f,w)
127 return band(rshift(a,f),2^(w or 1)-1)
128 end,
129 lrotate = bit.rol,
130 lshift = lshift,
131 replace = function(a,v,f,w)
132 local mask = 2^(w or 1)-1
133 return band(a,bnot(lshift(mask,f)))+lshift(band(v,mask),f)
134 end,
135 rrotate = bit.ror,
136 rshift = rshift,
137}
138 ]] ) ()
139
140else
141
142
143
144
145
146 xpcall(function() local _, t = require("bit32") if t then bit32 = t end return end,function() end)
147
148end
149 |