with Ada.Numerics.Discrete_Random;
package body WL.Random is
package My_Random is new Ada.Numerics.Discrete_Random (Natural);
G : My_Random.Generator;
-------------------
-- Current_State --
-------------------
function Current_State return String is
State : My_Random.State;
begin
My_Random.Save (G, State);
return My_Random.Image (State);
end Current_State;
-------------------
-- Random_Number --
-------------------
function Random_Number (Max : Natural) return Natural is
begin
if Max = 0 then
return 0;
else
return My_Random.Random (G) mod Max;
end if;
end Random_Number;
-------------------
-- Random_Number --
-------------------
function Random_Number (Min, Max : Integer) return Integer is
begin
if Max < Min then
return Max;
else
return Min + My_Random.Random (G) mod (Max - Min + 1);
end if;
end Random_Number;
---------------
-- Randomise --
---------------
procedure Randomise is
begin
My_Random.Reset (G);
end Randomise;
-----------
-- Reset --
-----------
procedure Reset (Initiator : Integer) is
begin
My_Random.Reset (G, Initiator);
end Reset;
-------------------
-- Restore_State --
-------------------
procedure Restore_State (State : String) is
Restored_State : constant My_Random.State := My_Random.Value (State);
begin
My_Random.Reset (G, Restored_State);
end Restore_State;
begin
My_Random.Reset (G, 0);
end WL.Random;