1. private with Ada.Containers; 
  2. private with Ada.Strings.Hash_Case_Insensitive; 
  3.  
  4. package Statuses is 
  5.     pragma Elaborate_Body; 
  6.  
  7.     -- A Status is the hash value of a status string. 
  8.     type Status is private; 
  9.  
  10.     function "="( l, r : Status ) return Boolean; 
  11.  
  12.     -- Returns the Status value for a status id string; case insensitive. 
  13.     -- (Ex: To_Status("SUCCESS") = To_Status("success") Note that because a 
  14.     -- Status is a hash value, Status collisions are possible. 
  15.     function To_Status( id : String ) return Status; 
  16.     pragma Precondition( id'Length > 0 ); 
  17.  
  18.     ST_NONE      : constant Status;     -- "none" 
  19.     ST_FAILED    : constant Status;     -- "failed" 
  20.     ST_SUCCESS   : constant Status;     -- "success" 
  21.     ST_EXCEPTION : constant Status;     -- "exception" 
  22.  
  23. private 
  24.  
  25.     use Ada.Containers; 
  26.  
  27.     type Status is new Ada.Containers.Hash_Type; 
  28.  
  29.     ST_NONE      : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "none" )); 
  30.     ST_FAILED    : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "failed" )); 
  31.     ST_SUCCESS   : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "success" )); 
  32.     ST_EXCEPTION : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "exception" )); 
  33.  
  34. end Statuses;