wl_lib_0.1.3_1c94dc7c/src/wl-random.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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;