A.4.9 String Hashing
Static Semantics
The library function 
Strings.Hash has the following declaration: 
with Ada.Containers;
function Ada.Strings.Hash (Key : String) 
return Containers.Hash_Type;
pragma Pure(Ada.Strings.Hash);
 
Returns an implementation-defined 
value which is a function of the value of Key. If A and B 
are strings such that A equals B, Hash(A) equals 
Hash(B). 
The library function 
Strings.Fixed.Hash has the following declaration: 
with Ada.Containers, Ada.Strings.Hash;
function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
   renames Ada.Strings.Hash;
The generic library 
function Strings.Bounded.Hash has the following declaration: 
with Ada.Containers;
generic
   with package Bounded 
is
      new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash (Key : Bounded.Bounded_String)
   
return Containers.Hash_Type;
pragma Preelaborate(Ada.Strings.Bounded.Hash);
 
Equivalent to Strings.Hash 
(Bounded.To_String (Key));
The library function 
Strings.Unbounded.Hash has the following declaration: 
with Ada.Containers;
function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
   return Containers.Hash_Type;
pragma Preelaborate(Ada.Strings.Unbounded.Hash);
 
Equivalent to Strings.Hash 
(To_String (Key));
   The library function 
Strings.Hash_Case_Insensitive has the following declaration:
with Ada.Containers;
function Ada.Strings.Hash_Case_Insensitive (Key : String)
   return Containers.Hash_Type;
pragma Pure(Ada.Strings.Hash_Case_Insensitive);
 
Returns an implementation-defined 
value which is a function of the value of Key, converted to lower case. 
If A and B are strings such that Strings.Equal_Case_Insensitive (A, B) 
(see 
A.4.10) is True, then Hash_Case_Insensitive(A) 
equals Hash_Case_Insensitive(B). 
 
   The library function 
Strings.Fixed.Hash_Case_Insensitive has the following declaration:
with Ada.Containers, Ada.Strings.Hash_Case_Insensitive;
function Ada.Strings.Fixed.Hash_Case_Insensitive (Key : String)
   return Containers.Hash_Type 
renames Ada.Strings.Hash_Case_Insensitive;
 
   The generic library 
function Strings.Bounded.Hash_Case_Insensitive has the following declaration:
with Ada.Containers;
generic
   with package Bounded 
is
      new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash_Case_Insensitive
   (Key : Bounded.Bounded_String) 
return Containers.Hash_Type;
pragma Preelaborate(Ada.Strings.Bounded.Hash_Case_Insensitive);
 
Equivalent to Strings.Hash_Case_Insensitive 
(Bounded.To_String (Key)); 
   The library function 
Strings.Unbounded.Hash_Case_Insensitive has the following declaration:
with Ada.Containers;
function Ada.Strings.Unbounded.Hash_Case_Insensitive
   (Key : Unbounded_String) 
return Containers.Hash_Type;
pragma Preelaborate(Ada.Strings.Unbounded.Hash_Case_Insensitive);
 
Equivalent to Strings.Hash_Case_Insensitive 
(To_String (Key)); 
Implementation Advice
 The Hash functions should be good hash functions, 
returning a wide spread of values for different string values. It should 
be unlikely for similar strings to return the same value. 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe