A.4.9 String Hashing
Static Semantics
{
AI95-00302-03}
The library function Strings.Hash has the following
declaration:
{
AI05-0298-1}
with Ada.Containers;
function Ada.Strings.Hash (Key : String) return Containers.Hash_Type;
pragma Pure( Ada.Strings.Hash 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).
Implementation defined:
The values returned by Strings.Hash.
{
AI95-00302-03}
The library function Strings.Fixed.Hash has the
following declaration:
{
AI05-0298-1}
with Ada.Containers, Ada.Strings.Hash;
function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
renames Ada.Strings.Hash;
pragma Pure(Hash);
{
AI95-00302-03}
The generic library function Strings.Bounded.Hash
has the following declaration:
{
AI05-0298-1}
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 Hash);
{
AI05-0001-1}
Equivalent to Strings.Bounded.Hash
is equivalent to the function call Strings.Hash (Bounded.To_String (Key));
{
AI95-00302-03}
The library function Strings.Unbounded.Hash has
the following declaration:
{
AI05-0298-1}
with Ada.Containers;
function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
return Containers.Hash_Type;
pragma Preelaborate( Ada.Strings.Unbounded.Hash Hash);
{
AI05-0001-1}
Equivalent to Strings.Unbounded.Hash
is equivalent to the function call Strings.Hash (To_String (Key));
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).
{
AI05-0001-1}
{
AI05-0298-1}
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;
{
AI05-0001-1}
{
AI05-0298-1}
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));
{
AI05-0001-1}
{
AI05-0298-1}
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
{
AI95-00302-03}
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.
Implementation Advice:
Strings.Hash should be good a hash function,
returning a wide spread of values for different string values, and similar
strings should rarely return the same value.
Ramification: The
other functions are defined in terms of Strings.Hash, so they don't need
separate advice in the Annex.
Extensions to Ada 95
{
AI95-00302-03}
The Strings.Hash, Strings.Fixed.Hash,
Strings.Bounded.Hash, and Strings.Unbounded.Hash functions are new.
Extensions to Ada 2005
{
AI05-0001-1}
The Strings.Hash_Case_Insensitive,
Strings.Fixed.Hash_Case_Insensitive, Strings.Bounded.Hash_Case_Insensitive,
and Strings.Unbounded.Hash_Case_Insensitive functions are new.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe