File : a-cohata.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT LIBRARY COMPONENTS                          --
   4 --                                                                          --
   5 --            A D A . C O N T A I N E R S . H A S H _ T A B L E S           --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 2004-2015, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- This unit was originally developed by Matthew J Heaney.                  --
  28 ------------------------------------------------------------------------------
  29 
  30 --  This package declares the hash-table type used to implement hashed
  31 --  containers.
  32 
  33 with Ada.Containers.Helpers;
  34 
  35 package Ada.Containers.Hash_Tables is
  36    pragma Pure;
  37    --  Declare Pure so this can be imported by Remote_Types packages
  38 
  39    generic
  40       type Node_Type (<>) is limited private;
  41 
  42       type Node_Access is access Node_Type;
  43 
  44    package Generic_Hash_Table_Types is
  45 
  46       type Buckets_Type is array (Hash_Type range <>) of Node_Access;
  47 
  48       type Buckets_Access is access all Buckets_Type;
  49       for Buckets_Access'Storage_Size use 0;
  50       --  Storage_Size of zero so this package can be Pure
  51 
  52       type Hash_Table_Type is tagged record
  53          Buckets : Buckets_Access := null;
  54          Length  : Count_Type := 0;
  55          TC      : aliased Helpers.Tamper_Counts;
  56       end record;
  57 
  58       package Implementation is new Helpers.Generic_Implementation;
  59    end Generic_Hash_Table_Types;
  60 
  61    generic
  62       type Node_Type is private;
  63    package Generic_Bounded_Hash_Table_Types is
  64 
  65       type Nodes_Type is array (Count_Type range <>) of Node_Type;
  66       type Buckets_Type is array (Hash_Type range <>) of Count_Type;
  67 
  68       type Hash_Table_Type
  69         (Capacity : Count_Type;
  70          Modulus  : Hash_Type) is
  71       tagged record
  72          Length  : Count_Type                  := 0;
  73          TC      : aliased Helpers.Tamper_Counts;
  74          Free    : Count_Type'Base             := -1;
  75          Nodes   : Nodes_Type (1 .. Capacity)  := (others => <>);
  76          Buckets : Buckets_Type (1 .. Modulus) := (others => 0);
  77       end record;
  78 
  79       package Implementation is new Helpers.Generic_Implementation;
  80    end Generic_Bounded_Hash_Table_Types;
  81 
  82 end Ada.Containers.Hash_Tables;