OSDN Git Service

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