package Ada.Containers.Prime_Numbers is
pragma Pure;
type Primes_Type is array (Positive range <>) of Hash_Type;
Primes : constant Primes_Type :=
(53, 97, 193, 389, 769,
1543, 3079, 6151, 12289, 24593,
49157, 98317, 196613, 393241, 786433,
1572869, 3145739, 6291469, 12582917, 25165843,
50331653, 100663319, 201326611, 402653189, 805306457,
1610612741, 3221225473, 4294967291);
function To_Prime (Length : Count_Type) return Hash_Type;
end Ada.Containers.Prime_Numbers;
package body Ada.Containers.Prime_Numbers is
--------------
-- To_Prime --
--------------
function To_Prime (Length : Count_Type) return Hash_Type is
I, J, K : Integer'Base;
Index : Integer'Base;
begin
I := Primes'Last - Primes'First;
Index := Primes'First;
while I > 0 loop
J := I / 2;
K := Index + J;
if Primes (K) < Hash_Type (Length) then
Index := K + 1;
I := I - J - 1;
else
I := J;
end if;
end loop;
return Primes (Index);
end To_Prime;
end Ada.Containers.Prime_Numbers;