1/2
{20302AI95−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
{20302AI95−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
{20302AI95−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/2
Strings.Bounded.Hash is equivalent to the function call Strings.Hash (Bounded.To_String (Key));
9/2
{20302AI95−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/2
Strings.Unbounded.Hash is equivalent to the function call Strings.Hash (To_String (Key));
12/2
{20302AI95−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.
12.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.
12.b/2
Ramification: The other functions are defined in terms of Strings.Hash, so they don't need separate advice in the Annex.
12.c/2
{20302AI95−00302−03} {extensions to Ada 95} The Strings.Hash, Strings.Fixed.Hash, Strings.Bounded.Hash, and Strings.Unbounded.Hash functions are new.