replace lua Random implementation with usertype

This commit is contained in:
MihailRis
2025-09-25 23:53:11 +03:00
parent 3a40162f1e
commit 088bf63f3f
7 changed files with 115 additions and 38 deletions
-35
View File
@@ -1,35 +0,0 @@
local Random = {}
local M = 2 ^ 31
local A = 1103515245
local C = 12345
function Random.randint(self)
self._seed = (A * self._seed + C) % M
return self._seed
end
function Random.random(self, a, b)
local num = self:randint() % M / M
if b then
return math.floor(num * (b - a + 1) + a)
elseif a then
return math.floor(num * a + 1)
else
return num
end
end
function Random.seed(self, number)
if type(number) ~= "number" then
error("number expected")
end
self._seed = number
end
return function(seed)
if seed and type(seed) ~= "number" then
error("number expected")
end
return setmetatable({_seed = seed or random.random(M)}, {__index = Random})
end
+30 -1
View File
@@ -669,4 +669,33 @@ end
bit.compile = require "core:bitwise/compiler"
bit.execute = require "core:bitwise/executor"
random.Random = require "core:internal/random_generator"
function __vc_create_random_methods(random_methods)
local index = 1
local buffer = nil
local buffer_size = 64
function random_methods:bytes(n)
local bytes = Bytearray(n)
for i=1,n do
bytes[i] = self:random(255)
end
return bytes
end
function random_methods:random(a, b)
if not buffer or index > #buffer then
buffer = self:generate(buffer_size)
index = 1
end
local value = buffer[index]
if b then
value = math.floor(value * (b - a + 1) + a)
elseif a then
value = math.floor(value * a + 1)
end
index = index + 4
return value
end
return random_methods
end