OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [ada/] [a-cohama.ads] - Blame information for rev 16

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
------------------------------------------------------------------------------
2
--                                                                          --
3
--                         GNAT LIBRARY COMPONENTS                          --
4
--                                                                          --
5
--            A D A . C O N T A I N E R S . H A S H E D _ M A P S           --
6
--                                                                          --
7
--                                 S p e c                                  --
8
--                                                                          --
9
--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
10
--                                                                          --
11
-- This specification is derived from the Ada Reference Manual for use with --
12
-- GNAT. The copyright notice above, and the license provisions that follow --
13
-- apply solely to the  contents of the part following the private keyword. --
14
--                                                                          --
15
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
16
-- terms of the  GNU General Public License as published  by the Free Soft- --
17
-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
18
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
19
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
20
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
21
-- for  more details.  You should have  received  a copy of the GNU General --
22
-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
23
-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
24
-- Boston, MA 02110-1301, USA.                                              --
25
--                                                                          --
26
-- As a special exception,  if other files  instantiate  generics from this --
27
-- unit, or you link  this unit with other files  to produce an executable, --
28
-- this  unit  does not  by itself cause  the resulting  executable  to  be --
29
-- covered  by the  GNU  General  Public  License.  This exception does not --
30
-- however invalidate  any other reasons why  the executable file  might be --
31
-- covered by the  GNU Public License.                                      --
32
--                                                                          --
33
-- This unit was originally developed by Matthew J Heaney.                  --
34
------------------------------------------------------------------------------
35
 
36
with Ada.Containers.Hash_Tables;
37
with Ada.Streams;
38
with Ada.Finalization;
39
 
40
generic
41
   type Key_Type is private;
42
   type Element_Type is private;
43
 
44
   with function Hash (Key : Key_Type) return Hash_Type;
45
   with function Equivalent_Keys (Left, Right : Key_Type) return Boolean;
46
   with function "=" (Left, Right : Element_Type) return Boolean is <>;
47
 
48
package Ada.Containers.Hashed_Maps is
49
   pragma Preelaborate;
50
 
51
   type Map is tagged private;
52
 
53
   type Cursor is private;
54
 
55
   Empty_Map : constant Map;
56
 
57
   No_Element : constant Cursor;
58
 
59
   function "=" (Left, Right : Map) return Boolean;
60
 
61
   function Capacity (Container : Map) return Count_Type;
62
 
63
   procedure Reserve_Capacity (Container : in out Map;
64
                               Capacity  : Count_Type);
65
 
66
   function Length (Container : Map) return Count_Type;
67
 
68
   function Is_Empty (Container : Map) return Boolean;
69
 
70
   procedure Clear (Container : in out Map);
71
 
72
   function Key (Position : Cursor) return Key_Type;
73
 
74
   function Element (Position : Cursor) return Element_Type;
75
 
76
   procedure Replace_Element
77
     (Container : in out Map;
78
      Position  : Cursor;
79
      New_Item  : Element_Type);
80
 
81
   procedure Query_Element
82
     (Position : Cursor;
83
      Process  : not null access
84
                   procedure (Key : Key_Type; Element : Element_Type));
85
 
86
   procedure Update_Element
87
     (Container : in out Map;
88
      Position  : Cursor;
89
      Process   : not null access
90
                   procedure (Key : Key_Type; Element : in out Element_Type));
91
 
92
   procedure Move (Target : in out Map; Source : in out Map);
93
 
94
   procedure Insert
95
     (Container : in out Map;
96
      Key       : Key_Type;
97
      New_Item  : Element_Type;
98
      Position  : out Cursor;
99
      Inserted  : out Boolean);
100
 
101
   procedure Insert
102
     (Container : in out Map;
103
      Key       : Key_Type;
104
      Position  : out Cursor;
105
      Inserted  : out Boolean);
106
 
107
   procedure Insert
108
     (Container : in out Map;
109
      Key       : Key_Type;
110
      New_Item  : Element_Type);
111
 
112
   procedure Include
113
     (Container : in out Map;
114
      Key       : Key_Type;
115
      New_Item  : Element_Type);
116
 
117
   procedure Replace
118
     (Container : in out Map;
119
      Key       : Key_Type;
120
      New_Item  : Element_Type);
121
 
122
   procedure Exclude (Container : in out Map; Key : Key_Type);
123
 
124
   procedure Delete (Container : in out Map; Key : Key_Type);
125
 
126
   procedure Delete (Container : in out Map; Position : in out Cursor);
127
 
128
   function First (Container : Map) return Cursor;
129
 
130
   function Next (Position : Cursor) return Cursor;
131
 
132
   procedure Next (Position : in out Cursor);
133
 
134
   function Find (Container : Map; Key : Key_Type) return Cursor;
135
 
136
   function Contains (Container : Map; Key : Key_Type) return Boolean;
137
 
138
   function Element (Container : Map; Key : Key_Type) return Element_Type;
139
 
140
   function Has_Element (Position : Cursor) return Boolean;
141
 
142
   function Equivalent_Keys (Left, Right : Cursor) return Boolean;
143
 
144
   function Equivalent_Keys (Left : Cursor; Right : Key_Type) return Boolean;
145
 
146
   function Equivalent_Keys (Left : Key_Type; Right : Cursor) return Boolean;
147
 
148
   procedure Iterate
149
     (Container : Map;
150
      Process   : not null access procedure (Position : Cursor));
151
 
152
private
153
   pragma Inline ("=");
154
   pragma Inline (Length);
155
   pragma Inline (Is_Empty);
156
   pragma Inline (Clear);
157
   pragma Inline (Key);
158
   pragma Inline (Element);
159
   pragma Inline (Move);
160
   pragma Inline (Contains);
161
   pragma Inline (Capacity);
162
   pragma Inline (Reserve_Capacity);
163
   pragma Inline (Has_Element);
164
   pragma Inline (Equivalent_Keys);
165
 
166
   type Node_Type;
167
   type Node_Access is access Node_Type;
168
 
169
   type Node_Type is limited record
170
      Key     : Key_Type;
171
      Element : Element_Type;
172
      Next    : Node_Access;
173
   end record;
174
 
175
   package HT_Types is new Hash_Tables.Generic_Hash_Table_Types
176
     (Node_Type,
177
      Node_Access);
178
 
179
   type Map is new Ada.Finalization.Controlled with record
180
      HT : HT_Types.Hash_Table_Type;
181
   end record;
182
 
183
   use HT_Types;
184
   use Ada.Finalization;
185
 
186
   procedure Adjust (Container : in out Map);
187
 
188
   procedure Finalize (Container : in out Map);
189
 
190
   use Ada.Streams;
191
 
192
   procedure Write
193
     (Stream    : access Root_Stream_Type'Class;
194
      Container : Map);
195
 
196
   for Map'Write use Write;
197
 
198
   procedure Read
199
     (Stream    : access Root_Stream_Type'Class;
200
      Container : out Map);
201
 
202
   for Map'Read use Read;
203
 
204
   Empty_Map : constant Map := (Controlled with HT => (null, 0, 0, 0));
205
 
206
   type Map_Access is access constant Map;
207
   for Map_Access'Storage_Size use 0;
208
 
209
   type Cursor is
210
      record
211
         Container : Map_Access;
212
         Node      : Node_Access;
213
      end record;
214
 
215
   procedure Write
216
     (Stream : access Root_Stream_Type'Class;
217
      Item   : Cursor);
218
 
219
   for Cursor'Write use Write;
220
 
221
   procedure Read
222
     (Stream : access Root_Stream_Type'Class;
223
      Item   : out Cursor);
224
 
225
   for Cursor'Read use Read;
226
 
227
   No_Element : constant Cursor := (Container => null, Node => null);
228
 
229
end Ada.Containers.Hashed_Maps;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.