------------------------------------------------------------------------------ -- -- -- GNAT RUN-TIME COMPONENTS -- -- -- -- G N A T . T A B L E -- -- -- -- S p e c -- -- -- -- Copyright (C) 1998-2022, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- -- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- -- GNAT was originally developed by the GNAT team at New York University. -- -- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ -- This package provides a singleton version of GNAT.Dynamic_Tables -- (g-dyntab.ads). See that package for documentation. This package just -- declares a single instance of GNAT.Dynamic_Tables.Instance, and provides -- wrappers for all the subprograms, passing that single instance. -- Note that these three interfaces should remain synchronized to keep as much -- coherency as possible among these related units: -- -- GNAT.Dynamic_Tables -- GNAT.Table -- Table (the compiler unit) with GNAT.Dynamic_Tables; generic type Table_Component_Type is private; type Table_Index_Type is range <>; Table_Low_Bound : Table_Index_Type := Table_Index_Type'First; Table_Initial : Positive := 8; Table_Increment : Natural := 100; Table_Name : String := ""; -- for debugging printouts pragma Unreferenced (Table_Name); Release_Threshold : Natural := 0; package GNAT.Table is pragma Elaborate_Body; package Tab is new GNAT.Dynamic_Tables (Table_Component_Type, Table_Index_Type, Table_Low_Bound, Table_Initial, Table_Increment, Release_Threshold); subtype Valid_Table_Index_Type is Tab.Valid_Table_Index_Type; subtype Table_Last_Type is Tab.Table_Last_Type; subtype Table_Type is Tab.Table_Type; function "=" (X, Y : Table_Type) return Boolean renames Tab."="; subtype Table_Ptr is Tab.Table_Ptr; The_Instance : Tab.Instance; Table : Table_Ptr renames The_Instance.Table; Locked : Boolean renames The_Instance.Locked; function Is_Empty return Boolean; procedure Init; pragma Inline (Init); procedure Free; pragma Inline (Free); function First return Table_Index_Type; pragma Inline (First); function Last return Table_Last_Type; pragma Inline (Last); procedure Release; pragma Inline (Release); procedure Set_Last (New_Val : Table_Last_Type); pragma Inline (Set_Last); procedure Increment_Last; pragma Inline (Increment_Last); procedure Decrement_Last; pragma Inline (Decrement_Last); procedure Append (New_Val : Table_Component_Type); pragma Inline (Append); procedure Append_All (New_Vals : Table_Type); pragma Inline (Append_All); procedure Set_Item (Index : Valid_Table_Index_Type; Item : Table_Component_Type); pragma Inline (Set_Item); subtype Saved_Table is Tab.Instance; -- Type used for Save/Restore subprograms function Save return Saved_Table; pragma Inline (Save); -- Resets table to empty, but saves old contents of table in returned -- value, for possible later restoration by a call to Restore. procedure Restore (T : in out Saved_Table); pragma Inline (Restore); -- Given a Saved_Table value returned by a prior call to Save, restores -- the table to the state it was in at the time of the Save call. procedure Allocate (Num : Integer := 1); function Allocate (Num : Integer := 1) return Valid_Table_Index_Type; pragma Inline (Allocate); -- Adds Num to Last. The function version also returns the old value of -- Last + 1. Note that this function has the possible side effect of -- reallocating the table. This means that a reference X.Table (X.Allocate) -- is incorrect, since the call to X.Allocate may modify the results of -- calling X.Table. generic with procedure Action (Index : Valid_Table_Index_Type; Item : Table_Component_Type; Quit : in out Boolean) is <>; procedure For_Each; pragma Inline (For_Each); generic with function Lt (Comp1, Comp2 : Table_Component_Type) return Boolean; procedure Sort_Table; pragma Inline (Sort_Table); end GNAT.Table;