X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fada%2Fa-cohama.ads;h=42b1cada502b5cf93a3a36ef9f00a945f9a60ed5;hb=2c3d0a6d737c0b55769f8e2169bc210b85575f72;hp=72dd1c2b107785fe62a2c785a36a7d1bddae1308;hpb=7ce1e9473ed905b0abcbe66b2fef2c81c8e3cffa;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/ada/a-cohama.ads b/gcc/ada/a-cohama.ads index 72dd1c2b107..42b1cada502 100644 --- a/gcc/ada/a-cohama.ads +++ b/gcc/ada/a-cohama.ads @@ -2,11 +2,11 @@ -- -- -- GNAT LIBRARY COMPONENTS -- -- -- --- ADA.CONTAINERS.HASHED_MAPS -- +-- A D A . C O N T A I N E R S . H A S H E D _ M A P S -- -- -- -- S p e c -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -20,8 +20,8 @@ -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- -- for more details. You should have received a copy of the GNU General -- -- Public License distributed with GNAT; see file COPYING. If not, write -- --- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- --- MA 02111-1307, USA. -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- -- -- -- As a special exception, if other files instantiate generics from this -- -- unit, or you link this unit with other files to produce an executable, -- @@ -35,20 +35,18 @@ with Ada.Containers.Hash_Tables; with Ada.Streams; +with Ada.Finalization; generic type Key_Type is private; - type Element_Type is private; with function Hash (Key : Key_Type) return Hash_Type; - with function Equivalent_Keys (Left, Right : Key_Type) return Boolean; - with function "=" (Left, Right : Element_Type) return Boolean is <>; package Ada.Containers.Hashed_Maps is -pragma Preelaborate (Hashed_Maps); + pragma Preelaborate; type Map is tagged private; @@ -60,14 +58,25 @@ pragma Preelaborate (Hashed_Maps); function "=" (Left, Right : Map) return Boolean; + function Capacity (Container : Map) return Count_Type; + + procedure Reserve_Capacity (Container : in out Map; + Capacity : Count_Type); + function Length (Container : Map) return Count_Type; function Is_Empty (Container : Map) return Boolean; procedure Clear (Container : in out Map); - function Element (Position : Cursor) - return Element_Type; + function Key (Position : Cursor) return Key_Type; + + function Element (Position : Cursor) return Element_Type; + + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type); procedure Query_Element (Position : Cursor; @@ -75,12 +84,11 @@ pragma Preelaborate (Hashed_Maps); procedure (Key : Key_Type; Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; Element : in out Element_Type)); - procedure Replace_Element (Position : Cursor; By : Element_Type); - procedure Move (Target : in out Map; Source : in out Map); procedure Insert @@ -93,6 +101,12 @@ pragma Preelaborate (Hashed_Maps); procedure Insert (Container : in out Map; Key : Key_Type; + Position : out Cursor; + Inserted : out Boolean); + + procedure Insert + (Container : in out Map; + Key : Key_Type; New_Item : Element_Type); procedure Include @@ -105,38 +119,25 @@ pragma Preelaborate (Hashed_Maps); Key : Key_Type; New_Item : Element_Type); - procedure Insert - (Container : in out Map; - Key : Key_Type; - Position : out Cursor; - Inserted : out Boolean); + procedure Exclude (Container : in out Map; Key : Key_Type); procedure Delete (Container : in out Map; Key : Key_Type); - procedure Exclude (Container : in out Map; Key : Key_Type); - procedure Delete (Container : in out Map; Position : in out Cursor); - function Contains (Container : Map; Key : Key_Type) return Boolean; - - function Find (Container : Map; Key : Key_Type) return Cursor; - - function Element (Container : Map; Key : Key_Type) return Element_Type; - - function Capacity (Container : Map) return Count_Type; - - procedure Reserve_Capacity (Container : in out Map; - Capacity : Count_Type); - function First (Container : Map) return Cursor; function Next (Position : Cursor) return Cursor; procedure Next (Position : in out Cursor); - function Has_Element (Position : Cursor) return Boolean; + function Find (Container : Map; Key : Key_Type) return Cursor; - function Key (Position : Cursor) return Key_Type; + function Contains (Container : Map; Key : Key_Type) return Boolean; + + function Element (Container : Map; Key : Key_Type) return Element_Type; + + function Has_Element (Position : Cursor) return Boolean; function Equivalent_Keys (Left, Right : Cursor) return Boolean; @@ -149,15 +150,38 @@ pragma Preelaborate (Hashed_Maps); Process : not null access procedure (Position : Cursor)); private + pragma Inline ("="); + pragma Inline (Length); + pragma Inline (Is_Empty); + pragma Inline (Clear); + pragma Inline (Key); + pragma Inline (Element); + pragma Inline (Move); + pragma Inline (Contains); + pragma Inline (Capacity); + pragma Inline (Reserve_Capacity); + pragma Inline (Has_Element); + pragma Inline (Equivalent_Keys); type Node_Type; type Node_Access is access Node_Type; - package HT_Types is new Hash_Tables.Generic_Hash_Table_Types (Node_Access); + type Node_Type is limited record + Key : Key_Type; + Element : Element_Type; + Next : Node_Access; + end record; - use HT_Types; + package HT_Types is new Hash_Tables.Generic_Hash_Table_Types + (Node_Type, + Node_Access); + + type Map is new Ada.Finalization.Controlled with record + HT : HT_Types.Hash_Table_Type; + end record; - type Map is new Hash_Table_Type with null record; + use HT_Types; + use Ada.Finalization; procedure Adjust (Container : in out Map); @@ -177,7 +201,7 @@ private for Map'Read use Read; - Empty_Map : constant Map := (Hash_Table_Type with null record); + Empty_Map : constant Map := (Controlled with HT => (null, 0, 0, 0)); type Map_Access is access constant Map; for Map_Access'Storage_Size use 0; @@ -188,6 +212,18 @@ private Node : Node_Access; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := (Container => null, Node => null); end Ada.Containers.Hashed_Maps;