A.4.9 String Hashing
Static Semantics
1/2
{
AI95-00302-03}
The library function Strings.Hash has the following declaration:
2/2
with Ada.Containers;
function Ada.Strings.Hash (Key : String)
return Containers.Hash_Type;
pragma Pure(Hash);
3/2
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).
3.a/2
Implementation defined: The values returned
by Strings.Hash.
4/2
{
AI95-00302-03}
The library function Strings.Fixed.Hash has the following declaration:
5/2
with Ada.Containers, Ada.Strings.Hash;
function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
renames Ada.Strings.Hash;
pragma Pure(Hash);
6/2
{
AI95-00302-03}
The generic library function Strings.Bounded.Hash has the following declaration:
7/2
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);
8/3
{
AI05-0001-1}
Equivalent to Strings.Hash (Bounded.To_String (Key));
9/2
{
AI95-00302-03}
The library function Strings.Unbounded.Hash has the following declaration:
10/2
with Ada.Containers;
function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
return Containers.Hash_Type;
pragma Preelaborate(Hash);
11/3
{
AI05-0001-1}
Equivalent to Strings.Hash (To_String (Key));
12/3
{
AI05-0001-1}
The library function Strings.Hash_Case_Insensitive has the following
declaration:
13/3
with Ada.Containers;
function Ada.Strings.Hash_Case_Insensitive (Key : String)
return Containers.Hash_Type;
pragma Pure(Hash_Case_Insensitive);
14/3
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).
14.1/3
{
AI05-0001-1}
The library function Strings.Fixed.Hash_Case_Insensitive has the following
declaration:
14.2/3
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;
pragma Pure(Hash_Case_Insensitive);
14.3/2
{
AI05-0001-1}
The generic library function Strings.Bounded.Hash_Case_Insensitive has
the following declaration:
14.4/3
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(Hash_Case_Insensitive);
14.5/3
Equivalent to Strings.Hash_Case_Insensitive
(Bounded.To_String (Key));
14.6/3
{
AI05-0001-1}
The library function Strings.Unbounded.Hash_Case_Insensitive has the
following declaration:
14.7/3
with Ada.Containers;
function Ada.Strings.Unbounded.Hash_Case_Insensitive
(Key : Unbounded_String)
return Containers.Hash_Type;
pragma Preelaborate(Hash_Case_Insensitive);
14.8/3
Equivalent to Strings.Hash_Case_Insensitive
(To_String (Key));
Implementation Advice
15/2
{
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.
15.a/2
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.
15.b/2
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
15.c/2
{
AI95-00302-03}
The Strings.Hash, Strings.Fixed.Hash, Strings.Bounded.Hash,
and Strings.Unbounded.Hash functions are new.
Extensions to Ada 2005
15.d/3
{
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