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(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;
pragma Pure(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(Hash);
Strings.Bounded.Hash
is equivalent to the function call 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(Hash);
Strings.Unbounded.Hash
is equivalent to the function call Strings.Hash (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.