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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [ada/] [a-ciorse.ads] - Blame information for rev 826

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 281 jeremybenn
------------------------------------------------------------------------------
2
--                                                                          --
3
--                         GNAT LIBRARY COMPONENTS                          --
4
--                                                                          --
5
--                 ADA.CONTAINERS.INDEFINITE_ORDERED_SETS                   --
6
--                                                                          --
7
--                                 S p e c                                  --
8
--                                                                          --
9
--          Copyright (C) 2004-2009, 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 3,  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.                                     --
21
--                                                                          --
22
-- As a special exception under Section 7 of GPL version 3, you are granted --
23
-- additional permissions described in the GCC Runtime Library Exception,   --
24
-- version 3.1, as published by the Free Software Foundation.               --
25
--                                                                          --
26
-- You should have received a copy of the GNU General Public License and    --
27
-- a copy of the GCC Runtime Library Exception along with this program;     --
28
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
29
-- <http://www.gnu.org/licenses/>.                                          --
30
--                                                                          --
31
-- This unit was originally developed by Matthew J Heaney.                  --
32
------------------------------------------------------------------------------
33
 
34
private with Ada.Containers.Red_Black_Trees;
35
private with Ada.Finalization;
36
private with Ada.Streams;
37
 
38
generic
39
   type Element_Type (<>) is private;
40
 
41
   with function "<" (Left, Right : Element_Type) return Boolean is <>;
42
   with function "=" (Left, Right : Element_Type) return Boolean is <>;
43
 
44
package Ada.Containers.Indefinite_Ordered_Sets is
45
   pragma Preelaborate;
46
   pragma Remote_Types;
47
 
48
   function Equivalent_Elements (Left, Right : Element_Type) return Boolean;
49
 
50
   type Set is tagged private;
51
   pragma Preelaborable_Initialization (Set);
52
 
53
   type Cursor is private;
54
   pragma Preelaborable_Initialization (Cursor);
55
 
56
   Empty_Set : constant Set;
57
 
58
   No_Element : constant Cursor;
59
 
60
   function "=" (Left, Right : Set) return Boolean;
61
 
62
   function Equivalent_Sets (Left, Right : Set) return Boolean;
63
 
64
   function To_Set (New_Item : Element_Type) return Set;
65
 
66
   function Length (Container : Set) return Count_Type;
67
 
68
   function Is_Empty (Container : Set) return Boolean;
69
 
70
   procedure Clear (Container : in out Set);
71
 
72
   function Element (Position : Cursor) return Element_Type;
73
 
74
   procedure Replace_Element
75
     (Container : in out Set;
76
      Position  : Cursor;
77
      New_Item  : Element_Type);
78
 
79
   procedure Query_Element
80
     (Position : Cursor;
81
      Process  : not null access procedure (Element : Element_Type));
82
 
83
   procedure Move (Target : in out Set; Source : in out Set);
84
 
85
   procedure Insert
86
     (Container : in out Set;
87
      New_Item  : Element_Type;
88
      Position  : out Cursor;
89
      Inserted  : out Boolean);
90
 
91
   procedure Insert
92
     (Container : in out Set;
93
      New_Item  : Element_Type);
94
 
95
   procedure Include
96
     (Container : in out Set;
97
      New_Item  : Element_Type);
98
 
99
   procedure Replace
100
     (Container : in out Set;
101
      New_Item  : Element_Type);
102
 
103
   procedure Exclude
104
     (Container : in out Set;
105
      Item      : Element_Type);
106
 
107
   procedure Delete
108
     (Container : in out Set;
109
      Item      : Element_Type);
110
 
111
   procedure Delete
112
     (Container : in out Set;
113
      Position  : in out Cursor);
114
 
115
   procedure Delete_First (Container : in out Set);
116
 
117
   procedure Delete_Last (Container : in out Set);
118
 
119
   procedure Union (Target : in out Set; Source : Set);
120
 
121
   function Union (Left, Right : Set) return Set;
122
 
123
   function "or" (Left, Right : Set) return Set renames Union;
124
 
125
   procedure Intersection (Target : in out Set; Source : Set);
126
 
127
   function Intersection (Left, Right : Set) return Set;
128
 
129
   function "and" (Left, Right : Set) return Set renames Intersection;
130
 
131
   procedure Difference (Target : in out Set; Source : Set);
132
 
133
   function Difference (Left, Right : Set) return Set;
134
 
135
   function "-" (Left, Right : Set) return Set renames Difference;
136
 
137
   procedure Symmetric_Difference (Target : in out Set; Source : Set);
138
 
139
   function Symmetric_Difference (Left, Right : Set) return Set;
140
 
141
   function "xor" (Left, Right : Set) return Set renames Symmetric_Difference;
142
 
143
   function Overlap (Left, Right : Set) return Boolean;
144
 
145
   function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
146
 
147
   function First (Container : Set) return Cursor;
148
 
149
   function First_Element (Container : Set) return Element_Type;
150
 
151
   function Last (Container : Set) return Cursor;
152
 
153
   function Last_Element (Container : Set) return Element_Type;
154
 
155
   function Next (Position : Cursor) return Cursor;
156
 
157
   procedure Next (Position : in out Cursor);
158
 
159
   function Previous (Position : Cursor) return Cursor;
160
 
161
   procedure Previous (Position : in out Cursor);
162
 
163
   function Find (Container : Set; Item : Element_Type) return Cursor;
164
 
165
   function Floor (Container : Set; Item : Element_Type) return Cursor;
166
 
167
   function Ceiling (Container : Set; Item : Element_Type) return Cursor;
168
 
169
   function Contains (Container : Set; Item : Element_Type) return Boolean;
170
 
171
   function Has_Element (Position : Cursor) return Boolean;
172
 
173
   function "<" (Left, Right : Cursor) return Boolean;
174
 
175
   function ">" (Left, Right : Cursor) return Boolean;
176
 
177
   function "<" (Left : Cursor; Right : Element_Type) return Boolean;
178
 
179
   function ">" (Left : Cursor; Right : Element_Type) return Boolean;
180
 
181
   function "<" (Left : Element_Type; Right : Cursor) return Boolean;
182
 
183
   function ">" (Left : Element_Type; Right : Cursor) return Boolean;
184
 
185
   procedure Iterate
186
     (Container : Set;
187
      Process   : not null access procedure (Position : Cursor));
188
 
189
   procedure Reverse_Iterate
190
     (Container : Set;
191
      Process   : not null access procedure (Position : Cursor));
192
 
193
   generic
194
      type Key_Type (<>) is private;
195
 
196
      with function Key (Element : Element_Type) return Key_Type;
197
 
198
      with function "<" (Left, Right : Key_Type) return Boolean is <>;
199
 
200
   package Generic_Keys is
201
 
202
      function Equivalent_Keys (Left, Right : Key_Type) return Boolean;
203
 
204
      function Key (Position : Cursor) return Key_Type;
205
 
206
      function Element (Container : Set; Key : Key_Type) return Element_Type;
207
 
208
      procedure Replace
209
        (Container : in out Set;
210
         Key       : Key_Type;
211
         New_Item  : Element_Type);
212
 
213
      procedure Exclude (Container : in out Set; Key : Key_Type);
214
 
215
      procedure Delete (Container : in out Set; Key : Key_Type);
216
 
217
      function Find
218
        (Container : Set;
219
         Key       : Key_Type) return Cursor;
220
 
221
      function Floor
222
        (Container : Set;
223
         Key       : Key_Type) return Cursor;
224
 
225
      function Ceiling
226
        (Container : Set;
227
         Key       : Key_Type) return Cursor;
228
 
229
      function Contains
230
        (Container : Set;
231
         Key       : Key_Type) return Boolean;
232
 
233
      procedure Update_Element_Preserving_Key
234
        (Container : in out Set;
235
         Position  : Cursor;
236
         Process   : not null access
237
                       procedure (Element : in out Element_Type));
238
 
239
   end Generic_Keys;
240
 
241
private
242
 
243
   pragma Inline (Next);
244
   pragma Inline (Previous);
245
 
246
   type Node_Type;
247
   type Node_Access is access Node_Type;
248
 
249
   type Element_Access is access Element_Type;
250
 
251
   type Node_Type is limited record
252
      Parent  : Node_Access;
253
      Left    : Node_Access;
254
      Right   : Node_Access;
255
      Color   : Red_Black_Trees.Color_Type := Red_Black_Trees.Red;
256
      Element : Element_Access;
257
   end record;
258
 
259
   package Tree_Types is new Red_Black_Trees.Generic_Tree_Types
260
     (Node_Type,
261
      Node_Access);
262
 
263
   type Set is new Ada.Finalization.Controlled with record
264
      Tree : Tree_Types.Tree_Type;
265
   end record;
266
 
267
   overriding
268
   procedure Adjust (Container : in out Set);
269
 
270
   overriding
271
   procedure Finalize (Container : in out Set) renames Clear;
272
 
273
   use Red_Black_Trees;
274
   use Tree_Types;
275
   use Ada.Finalization;
276
   use Ada.Streams;
277
 
278
   type Set_Access is access all Set;
279
   for Set_Access'Storage_Size use 0;
280
 
281
   type Cursor is record
282
      Container : Set_Access;
283
      Node      : Node_Access;
284
   end record;
285
 
286
   procedure Write
287
     (Stream : not null access Root_Stream_Type'Class;
288
      Item   : Cursor);
289
 
290
   for Cursor'Write use Write;
291
 
292
   procedure Read
293
     (Stream : not null access Root_Stream_Type'Class;
294
      Item   : out Cursor);
295
 
296
   for Cursor'Read use Read;
297
 
298
   No_Element : constant Cursor := Cursor'(null, null);
299
 
300
   procedure Write
301
     (Stream    : not null access Root_Stream_Type'Class;
302
      Container : Set);
303
 
304
   for Set'Write use Write;
305
 
306
   procedure Read
307
     (Stream    : not null access Root_Stream_Type'Class;
308
      Container : out Set);
309
 
310
   for Set'Read use Read;
311
 
312
   Empty_Set : constant Set :=
313
                 (Controlled with Tree => (First  => null,
314
                                           Last   => null,
315
                                           Root   => null,
316
                                           Length => 0,
317
                                           Busy   => 0,
318
                                           Lock   => 0));
319
 
320
end Ada.Containers.Indefinite_Ordered_Sets;

powered by: WebSVN 2.1.0

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