diff options
Diffstat (limited to 'gcc/ada/s-rannum.ads')
-rw-r--r-- | gcc/ada/s-rannum.ads | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/gcc/ada/s-rannum.ads b/gcc/ada/s-rannum.ads index 28dcdc69215..0d2a7e9dee7 100644 --- a/gcc/ada/s-rannum.ads +++ b/gcc/ada/s-rannum.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2007,2009 Free Software Foundation, Inc. -- +-- Copyright (C) 2007-2010, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -88,27 +88,27 @@ package System.Random_Numbers is -- in Reset). In general, there is little point in providing more than -- a certain number of values (currently 624). - procedure Reset (Gen : out Generator); + procedure Reset (Gen : Generator); -- Re-initialize the state of Gen from the time of day - procedure Reset (Gen : out Generator; Initiator : Initialization_Vector); - procedure Reset (Gen : out Generator; Initiator : Interfaces.Integer_32); - procedure Reset (Gen : out Generator; Initiator : Interfaces.Unsigned_32); - procedure Reset (Gen : out Generator; Initiator : Integer); + procedure Reset (Gen : Generator; Initiator : Initialization_Vector); + procedure Reset (Gen : Generator; Initiator : Interfaces.Integer_32); + procedure Reset (Gen : Generator; Initiator : Interfaces.Unsigned_32); + procedure Reset (Gen : Generator; Initiator : Integer); -- Re-initialize Gen based on the Initiator in various ways. Identical -- values of Initiator cause identical sequences of values. - procedure Reset (Gen : out Generator; From_State : Generator); + procedure Reset (Gen : Generator; From_State : Generator); -- Causes the state of Gen to be identical to that of From_State; Gen -- and From_State will produce identical sequences of values subsequently. - procedure Reset (Gen : out Generator; From_State : State); + procedure Reset (Gen : Generator; From_State : State); procedure Save (Gen : Generator; To_State : out State); -- The sequence -- Save (Gen2, S); Reset (Gen1, S) -- has the same effect as Reset (Gen2, Gen1). - procedure Reset (Gen : out Generator; From_Image : String); + procedure Reset (Gen : Generator; From_Image : String); function Image (Gen : Generator) return String; -- The call -- Reset (Gen2, Image (Gen1)) @@ -135,12 +135,19 @@ private subtype State_Val is Interfaces.Unsigned_32; type State is array (0 .. N - 1) of State_Val; + type Writable_Access (Self : access Generator) is limited null record; + -- Auxiliary type to make Generator a self-referential type + type Generator is limited record + Writable : Writable_Access (Generator'Access); + -- This self reference allows functions to modify Generator arguments + S : State := (others => 0); -- The shift register, a circular buffer I : Integer := N; - -- Current starting position in shift register S + -- Current starting position in shift register S (N means uninitialized) + -- We should avoid using the identifier I here ??? end record; end System.Random_Numbers; |