1. private with Ada.Containers; 
  2. private with Ada.Strings.Hash_Case_Insensitive; 
  3.  
  4. package Statuses is 
  5.     pragma Elaborate_Body; 
  6.  
  7.     type Status is private; 
  8.  
  9.     function "="( l, r : Status ) return Boolean; 
  10.  
  11.     function To_Status( id : String ) return Status; 
  12.     pragma Precondition( id'Length > 0 ); 
  13.  
  14.     ST_NONE      : constant Status; 
  15.     ST_FAILED    : constant Status; 
  16.     ST_SUCCESS   : constant Status; 
  17.     ST_EXCEPTION : constant Status; 
  18.  
  19. private 
  20.  
  21.     use Ada.Containers; 
  22.  
  23.     type Status is new Ada.Containers.Hash_Type; 
  24.  
  25.     ST_NONE      : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "none" )); 
  26.     ST_FAILED    : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "failed" )); 
  27.     ST_SUCCESS   : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "success" )); 
  28.     ST_EXCEPTION : constant Status := Status(Ada.Strings.Hash_Case_Insensitive( "exception" )); 
  29.  
  30. end Statuses;