Next: , Previous: A.4.8, Up: A.4


A.4.9 String Hashing

Static Semantics

1/2
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).

4/2
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
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
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));
Implementation Advice

12/2
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.