lace_0.1.0_347e4627/source/containers/lace-containers-shuffle_vector.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
with
     ada.Numerics.discrete_Random;


procedure lace.Containers.shuffle_Vector (the_Vector : in out vectors.Vector)
is
   use type vectors.Index_type;
begin
   for i in reverse 2 .. vectors.Index_type (the_Vector.Length)    -- Start from 2, since swapping the
   loop                                                            -- first element with itself is useless.
      declare
         subtype Index is vectors.Index_type range vectors.Index_type'First
                                                .. vectors.Index_type'First + i - 1;

         package random_Index is new ada.Numerics.discrete_Random (Index);
         use     random_Index;

         the_Generator : random_Index.Generator;
      begin
         the_Vector.swap (Random (the_Generator),
                          Index'Last);
      end;
   end loop;
end lace.Containers.shuffle_Vector;