OSDN Git Service

2003-10-21 Arnaud Charlet <charlet@act-europe.fr>
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-stwiun.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUN-TIME COMPONENTS                         --
4 --                                                                          --
5 --           A D A . S T R I N G S . W I D E _ U N B O U N D E D            --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                                                                          --
9 --          Copyright (C) 1992-2002 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,  59 Temple Place - Suite 330,  Boston, --
24 -- MA 02111-1307, 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 -- GNAT was originally developed  by the GNAT team at  New York University. --
34 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
35 --                                                                          --
36 ------------------------------------------------------------------------------
37
38 with Ada.Strings.Wide_Maps;
39 with Ada.Finalization;
40
41 package Ada.Strings.Wide_Unbounded is
42 pragma Preelaborate (Wide_Unbounded);
43
44    type Unbounded_Wide_String is private;
45
46    Null_Unbounded_Wide_String : constant Unbounded_Wide_String;
47
48    function Length (Source : Unbounded_Wide_String) return Natural;
49
50    type Wide_String_Access is access all Wide_String;
51
52    procedure Free (X : in out Wide_String_Access);
53
54    --------------------------------------------------------
55    -- Conversion, Concatenation, and Selection Functions --
56    --------------------------------------------------------
57
58    function To_Unbounded_Wide_String
59      (Source : Wide_String)
60       return   Unbounded_Wide_String;
61
62    function To_Unbounded_Wide_String
63      (Length : in Natural)
64       return   Unbounded_Wide_String;
65
66    function To_Wide_String
67      (Source : Unbounded_Wide_String)
68       return   Wide_String;
69
70    procedure Append
71      (Source   : in out Unbounded_Wide_String;
72       New_Item : in Unbounded_Wide_String);
73
74    procedure Append
75      (Source   : in out Unbounded_Wide_String;
76       New_Item : in Wide_String);
77
78    procedure Append
79      (Source   : in out Unbounded_Wide_String;
80       New_Item : in Wide_Character);
81
82    function "&"
83      (Left, Right : Unbounded_Wide_String)
84       return        Unbounded_Wide_String;
85
86    function "&"
87      (Left  : in Unbounded_Wide_String;
88       Right : in Wide_String)
89       return  Unbounded_Wide_String;
90
91    function "&"
92      (Left  : in Wide_String;
93       Right : in Unbounded_Wide_String)
94       return  Unbounded_Wide_String;
95
96    function "&"
97      (Left  : in Unbounded_Wide_String;
98       Right : in Wide_Character)
99       return  Unbounded_Wide_String;
100
101    function "&"
102      (Left  : in Wide_Character;
103       Right : in Unbounded_Wide_String)
104       return  Unbounded_Wide_String;
105
106    function Element
107      (Source : in Unbounded_Wide_String;
108       Index  : in Positive)
109       return   Wide_Character;
110
111    procedure Replace_Element
112      (Source : in out Unbounded_Wide_String;
113       Index  : in Positive;
114       By     : Wide_Character);
115
116    function Slice
117      (Source : in Unbounded_Wide_String;
118       Low    : in Positive;
119       High   : in Natural)
120       return   Wide_String;
121
122    function "="
123      (Left  : in Unbounded_Wide_String;
124       Right : in Unbounded_Wide_String)
125       return  Boolean;
126
127    function "="
128      (Left  : in Unbounded_Wide_String;
129       Right : in Wide_String)
130       return  Boolean;
131
132    function "="
133      (Left  : in Wide_String;
134       Right : in Unbounded_Wide_String)
135       return  Boolean;
136
137    function "<"
138      (Left  : in Unbounded_Wide_String;
139       Right : in Unbounded_Wide_String)
140       return  Boolean;
141
142    function "<"
143      (Left  : in Unbounded_Wide_String;
144       Right : in Wide_String)
145       return  Boolean;
146
147    function "<"
148      (Left  : in Wide_String;
149       Right : in Unbounded_Wide_String)
150       return  Boolean;
151
152    function "<="
153      (Left  : in Unbounded_Wide_String;
154       Right : in Unbounded_Wide_String)
155       return  Boolean;
156
157    function "<="
158      (Left  : in Unbounded_Wide_String;
159       Right : in Wide_String)
160       return  Boolean;
161
162    function "<="
163      (Left  : in Wide_String;
164       Right : in Unbounded_Wide_String)
165       return  Boolean;
166
167    function ">"
168      (Left  : in Unbounded_Wide_String;
169       Right : in Unbounded_Wide_String)
170       return  Boolean;
171
172    function ">"
173      (Left  : in Unbounded_Wide_String;
174       Right : in Wide_String)
175       return  Boolean;
176
177    function ">"
178      (Left  : in Wide_String;
179       Right : in Unbounded_Wide_String)
180       return  Boolean;
181
182    function ">="
183      (Left  : in Unbounded_Wide_String;
184       Right : in Unbounded_Wide_String)
185       return  Boolean;
186
187    function ">="
188      (Left  : in Unbounded_Wide_String;
189       Right : in Wide_String)
190       return  Boolean;
191
192    function ">="
193      (Left  : in Wide_String;
194       Right : in Unbounded_Wide_String)
195       return  Boolean;
196
197    ------------------------
198    -- Search Subprograms --
199    ------------------------
200
201    function Index
202      (Source   : in Unbounded_Wide_String;
203       Pattern  : in Wide_String;
204       Going    : in Direction := Forward;
205       Mapping  : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
206       return     Natural;
207
208    function Index
209      (Source   : in Unbounded_Wide_String;
210       Pattern  : in Wide_String;
211       Going    : in Direction := Forward;
212       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
213       return     Natural;
214
215    function Index
216      (Source : in Unbounded_Wide_String;
217       Set    : in Wide_Maps.Wide_Character_Set;
218       Test   : in Membership := Inside;
219       Going  : in Direction  := Forward)
220       return   Natural;
221
222    function Index_Non_Blank
223      (Source : in Unbounded_Wide_String;
224       Going  : in Direction := Forward)
225       return   Natural;
226
227    function Count
228      (Source  : in Unbounded_Wide_String;
229       Pattern : in Wide_String;
230       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
231       return    Natural;
232
233    function Count
234      (Source   : in Unbounded_Wide_String;
235       Pattern  : in Wide_String;
236       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
237       return     Natural;
238
239    function Count
240      (Source : in Unbounded_Wide_String;
241       Set    : in Wide_Maps.Wide_Character_Set)
242       return   Natural;
243
244    procedure Find_Token
245      (Source : in Unbounded_Wide_String;
246       Set    : in Wide_Maps.Wide_Character_Set;
247       Test   : in Membership;
248       First  : out Positive;
249       Last   : out Natural);
250
251    ------------------------------------
252    -- Wide_String Translation Subprograms --
253    ------------------------------------
254
255    function Translate
256      (Source  : in Unbounded_Wide_String;
257       Mapping : in Wide_Maps.Wide_Character_Mapping)
258       return    Unbounded_Wide_String;
259
260    procedure Translate
261      (Source  : in out Unbounded_Wide_String;
262       Mapping : Wide_Maps.Wide_Character_Mapping);
263
264    function Translate
265      (Source  : in Unbounded_Wide_String;
266       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
267       return    Unbounded_Wide_String;
268
269    procedure Translate
270      (Source  : in out Unbounded_Wide_String;
271       Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
272
273    ---------------------------------------
274    -- Wide_String Transformation Subprograms --
275    ---------------------------------------
276
277    function Replace_Slice
278      (Source : in Unbounded_Wide_String;
279       Low    : in Positive;
280       High   : in Natural;
281       By     : in Wide_String)
282       return   Unbounded_Wide_String;
283
284    procedure Replace_Slice
285      (Source   : in out Unbounded_Wide_String;
286       Low      : in Positive;
287       High     : in Natural;
288       By       : in Wide_String);
289
290    function Insert
291      (Source   : in Unbounded_Wide_String;
292       Before   : in Positive;
293       New_Item : in Wide_String)
294       return     Unbounded_Wide_String;
295
296    procedure Insert
297      (Source   : in out Unbounded_Wide_String;
298       Before   : in Positive;
299       New_Item : in Wide_String);
300
301    function Overwrite
302      (Source   : in Unbounded_Wide_String;
303       Position : in Positive;
304       New_Item : in Wide_String)
305       return     Unbounded_Wide_String;
306
307    procedure Overwrite
308      (Source    : in out Unbounded_Wide_String;
309       Position  : in Positive;
310       New_Item  : in Wide_String);
311
312    function Delete
313      (Source  : in Unbounded_Wide_String;
314       From    : in Positive;
315       Through : in Natural)
316       return    Unbounded_Wide_String;
317
318    procedure Delete
319      (Source  : in out Unbounded_Wide_String;
320       From    : in Positive;
321       Through : in Natural);
322
323    function Trim
324      (Source : in Unbounded_Wide_String;
325       Side   : in Trim_End)
326       return   Unbounded_Wide_String;
327
328    procedure Trim
329      (Source : in out Unbounded_Wide_String;
330       Side   : in Trim_End);
331
332    function Trim
333      (Source : in Unbounded_Wide_String;
334       Left   : in Wide_Maps.Wide_Character_Set;
335       Right  : in Wide_Maps.Wide_Character_Set)
336       return   Unbounded_Wide_String;
337
338    procedure Trim
339      (Source : in out Unbounded_Wide_String;
340       Left   : in Wide_Maps.Wide_Character_Set;
341       Right  : in Wide_Maps.Wide_Character_Set);
342
343    function Head
344      (Source : in Unbounded_Wide_String;
345       Count  : in Natural;
346       Pad    : in Wide_Character := Wide_Space)
347       return   Unbounded_Wide_String;
348
349    procedure Head
350      (Source : in out Unbounded_Wide_String;
351       Count  : in Natural;
352       Pad    : in Wide_Character := Wide_Space);
353
354    function Tail
355      (Source : in Unbounded_Wide_String;
356       Count  : in Natural;
357       Pad    : in Wide_Character := Wide_Space)
358       return   Unbounded_Wide_String;
359
360    procedure Tail
361      (Source : in out Unbounded_Wide_String;
362       Count  : in Natural;
363       Pad    : in Wide_Character := Wide_Space);
364
365    function "*"
366      (Left  : in Natural;
367       Right : in Wide_Character)
368       return  Unbounded_Wide_String;
369
370    function "*"
371      (Left  : in Natural;
372       Right : in Wide_String)
373       return  Unbounded_Wide_String;
374
375    function "*"
376      (Left  : in Natural;
377       Right : in Unbounded_Wide_String)
378       return  Unbounded_Wide_String;
379
380 private
381    pragma Inline (Length);
382
383    package AF renames Ada.Finalization;
384
385    Null_Wide_String : aliased Wide_String := "";
386
387    function To_Unbounded_Wide (S : Wide_String) return Unbounded_Wide_String
388      renames To_Unbounded_Wide_String;
389
390    type Unbounded_Wide_String is new AF.Controlled with record
391       Reference : Wide_String_Access := Null_Wide_String'Access;
392       Last      : Natural            := 0;
393    end record;
394
395    --  The Unbounded_Wide_String is using a buffered implementation to increase
396    --  speed of the Append/Delete/Insert procedures. The Reference string
397    --  pointer above contains the current string value and extra room at the
398    --  end to be used by the next Append routine. Last is the index of the
399    --  string ending character. So the current string value is really
400    --  Reference (1 .. Last).
401
402    pragma Stream_Convert
403      (Unbounded_Wide_String, To_Unbounded_Wide, To_Wide_String);
404
405    pragma Finalize_Storage_Only (Unbounded_Wide_String);
406
407    procedure Initialize (Object : in out Unbounded_Wide_String);
408    procedure Adjust     (Object : in out Unbounded_Wide_String);
409    procedure Finalize   (Object : in out Unbounded_Wide_String);
410
411    Null_Unbounded_Wide_String : constant Unbounded_Wide_String :=
412      (AF.Controlled with Reference => Null_Wide_String'Access, Last => 0);
413
414 end Ada.Strings.Wide_Unbounded;