Merge from mainline (167278:168000).
[official-gcc/graphite-test-results.git] / gcc / ada / a-stzsup.ads
blob7e67f53bae849e7720f15ad49489482657a3074f
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUN-TIME COMPONENTS --
4 -- --
5 -- A D A . S T R I N G S . W I D E _ W I D E _ S U P E R B O U N D E D --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 2003-2010, Free Software Foundation, Inc. --
10 -- --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
17 -- --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception, --
20 -- version 3.1, as published by the Free Software Foundation. --
21 -- --
22 -- You should have received a copy of the GNU General Public License and --
23 -- a copy of the GCC Runtime Library Exception along with this program; --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25 -- <http://www.gnu.org/licenses/>. --
26 -- --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
29 -- --
30 ------------------------------------------------------------------------------
32 -- This non generic package contains most of the implementation of the
33 -- generic package Ada.Strings.Wide_Wide_Bounded.Generic_Bounded_Length.
35 -- It defines type Super_String as a discriminated record with the maximum
36 -- length as the discriminant. Individual instantiations of the package
37 -- Strings.Wide_Wide_Bounded.Generic_Bounded_Length use this type with
38 -- an appropriate discriminant value set.
40 with Ada.Strings.Wide_Wide_Maps;
42 package Ada.Strings.Wide_Wide_Superbounded is
43 pragma Preelaborate;
45 Wide_Wide_NUL : constant Wide_Wide_Character :=
46 Wide_Wide_Character'Val (0);
48 type Super_String (Max_Length : Positive) is record
49 Current_Length : Natural := 0;
50 Data : Wide_Wide_String (1 .. Max_Length) :=
51 (others => Wide_Wide_NUL);
52 end record;
53 -- Wide_Wide_Bounded.Generic_Bounded_Length.Wide_Wide_Bounded_String is
54 -- derived from this type, with the constraint of the maximum length.
56 -- The subprograms defined for Super_String are similar to those defined
57 -- for Bounded_Wide_Wide_String, except that they have different names, so
58 -- that they can be renamed in Wide_Wide_Bounded.Generic_Bounded_Length.
60 function Super_Length (Source : Super_String) return Natural;
62 --------------------------------------------------------
63 -- Conversion, Concatenation, and Selection Functions --
64 --------------------------------------------------------
66 function To_Super_String
67 (Source : Wide_Wide_String;
68 Max_Length : Natural;
69 Drop : Truncation := Error) return Super_String;
70 -- Note the additional parameter Max_Length, which specifies the maximum
71 -- length setting of the resulting Super_String value.
73 -- The following procedures have declarations (and semantics) that are
74 -- exactly analogous to those declared in Ada.Strings.Wide_Wide_Bounded.
76 function Super_To_String (Source : Super_String) return Wide_Wide_String;
78 procedure Set_Super_String
79 (Target : out Super_String;
80 Source : Wide_Wide_String;
81 Drop : Truncation := Error);
83 function Super_Append
84 (Left : Super_String;
85 Right : Super_String;
86 Drop : Truncation := Error) return Super_String;
88 function Super_Append
89 (Left : Super_String;
90 Right : Wide_Wide_String;
91 Drop : Truncation := Error) return Super_String;
93 function Super_Append
94 (Left : Wide_Wide_String;
95 Right : Super_String;
96 Drop : Truncation := Error) return Super_String;
98 function Super_Append
99 (Left : Super_String;
100 Right : Wide_Wide_Character;
101 Drop : Truncation := Error) return Super_String;
103 function Super_Append
104 (Left : Wide_Wide_Character;
105 Right : Super_String;
106 Drop : Truncation := Error) return Super_String;
108 procedure Super_Append
109 (Source : in out Super_String;
110 New_Item : Super_String;
111 Drop : Truncation := Error);
113 procedure Super_Append
114 (Source : in out Super_String;
115 New_Item : Wide_Wide_String;
116 Drop : Truncation := Error);
118 procedure Super_Append
119 (Source : in out Super_String;
120 New_Item : Wide_Wide_Character;
121 Drop : Truncation := Error);
123 function Concat
124 (Left : Super_String;
125 Right : Super_String) return Super_String;
127 function Concat
128 (Left : Super_String;
129 Right : Wide_Wide_String) return Super_String;
131 function Concat
132 (Left : Wide_Wide_String;
133 Right : Super_String) return Super_String;
135 function Concat
136 (Left : Super_String;
137 Right : Wide_Wide_Character) return Super_String;
139 function Concat
140 (Left : Wide_Wide_Character;
141 Right : Super_String) return Super_String;
143 function Super_Element
144 (Source : Super_String;
145 Index : Positive) return Wide_Wide_Character;
147 procedure Super_Replace_Element
148 (Source : in out Super_String;
149 Index : Positive;
150 By : Wide_Wide_Character);
152 function Super_Slice
153 (Source : Super_String;
154 Low : Positive;
155 High : Natural) return Wide_Wide_String;
157 function Super_Slice
158 (Source : Super_String;
159 Low : Positive;
160 High : Natural) return Super_String;
162 procedure Super_Slice
163 (Source : Super_String;
164 Target : out Super_String;
165 Low : Positive;
166 High : Natural);
168 function "="
169 (Left : Super_String;
170 Right : Super_String) return Boolean;
172 function Equal
173 (Left : Super_String;
174 Right : Super_String) return Boolean renames "=";
176 function Equal
177 (Left : Super_String;
178 Right : Wide_Wide_String) return Boolean;
180 function Equal
181 (Left : Wide_Wide_String;
182 Right : Super_String) return Boolean;
184 function Less
185 (Left : Super_String;
186 Right : Super_String) return Boolean;
188 function Less
189 (Left : Super_String;
190 Right : Wide_Wide_String) return Boolean;
192 function Less
193 (Left : Wide_Wide_String;
194 Right : Super_String) return Boolean;
196 function Less_Or_Equal
197 (Left : Super_String;
198 Right : Super_String) return Boolean;
200 function Less_Or_Equal
201 (Left : Super_String;
202 Right : Wide_Wide_String) return Boolean;
204 function Less_Or_Equal
205 (Left : Wide_Wide_String;
206 Right : Super_String) return Boolean;
208 function Greater
209 (Left : Super_String;
210 Right : Super_String) return Boolean;
212 function Greater
213 (Left : Super_String;
214 Right : Wide_Wide_String) return Boolean;
216 function Greater
217 (Left : Wide_Wide_String;
218 Right : Super_String) return Boolean;
220 function Greater_Or_Equal
221 (Left : Super_String;
222 Right : Super_String) return Boolean;
224 function Greater_Or_Equal
225 (Left : Super_String;
226 Right : Wide_Wide_String) return Boolean;
228 function Greater_Or_Equal
229 (Left : Wide_Wide_String;
230 Right : Super_String) return Boolean;
232 ----------------------
233 -- Search Functions --
234 ----------------------
236 function Super_Index
237 (Source : Super_String;
238 Pattern : Wide_Wide_String;
239 Going : Direction := Forward;
240 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
241 Wide_Wide_Maps.Identity)
242 return Natural;
244 function Super_Index
245 (Source : Super_String;
246 Pattern : Wide_Wide_String;
247 Going : Direction := Forward;
248 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
249 return Natural;
251 function Super_Index
252 (Source : Super_String;
253 Set : Wide_Wide_Maps.Wide_Wide_Character_Set;
254 Test : Membership := Inside;
255 Going : Direction := Forward) return Natural;
257 function Super_Index
258 (Source : Super_String;
259 Pattern : Wide_Wide_String;
260 From : Positive;
261 Going : Direction := Forward;
262 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
263 Wide_Wide_Maps.Identity)
264 return Natural;
266 function Super_Index
267 (Source : Super_String;
268 Pattern : Wide_Wide_String;
269 From : Positive;
270 Going : Direction := Forward;
271 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
272 return Natural;
274 function Super_Index
275 (Source : Super_String;
276 Set : Wide_Wide_Maps.Wide_Wide_Character_Set;
277 From : Positive;
278 Test : Membership := Inside;
279 Going : Direction := Forward) return Natural;
281 function Super_Index_Non_Blank
282 (Source : Super_String;
283 Going : Direction := Forward) return Natural;
285 function Super_Index_Non_Blank
286 (Source : Super_String;
287 From : Positive;
288 Going : Direction := Forward) return Natural;
290 function Super_Count
291 (Source : Super_String;
292 Pattern : Wide_Wide_String;
293 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
294 Wide_Wide_Maps.Identity)
295 return Natural;
297 function Super_Count
298 (Source : Super_String;
299 Pattern : Wide_Wide_String;
300 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
301 return Natural;
303 function Super_Count
304 (Source : Super_String;
305 Set : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
307 procedure Super_Find_Token
308 (Source : Super_String;
309 Set : Wide_Wide_Maps.Wide_Wide_Character_Set;
310 From : Positive;
311 Test : Membership;
312 First : out Positive;
313 Last : out Natural);
315 procedure Super_Find_Token
316 (Source : Super_String;
317 Set : Wide_Wide_Maps.Wide_Wide_Character_Set;
318 Test : Membership;
319 First : out Positive;
320 Last : out Natural);
322 ------------------------------------
323 -- String Translation Subprograms --
324 ------------------------------------
326 function Super_Translate
327 (Source : Super_String;
328 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
329 return Super_String;
331 procedure Super_Translate
332 (Source : in out Super_String;
333 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
335 function Super_Translate
336 (Source : Super_String;
337 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
338 return Super_String;
340 procedure Super_Translate
341 (Source : in out Super_String;
342 Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
344 ---------------------------------------
345 -- String Transformation Subprograms --
346 ---------------------------------------
348 function Super_Replace_Slice
349 (Source : Super_String;
350 Low : Positive;
351 High : Natural;
352 By : Wide_Wide_String;
353 Drop : Truncation := Error) return Super_String;
355 procedure Super_Replace_Slice
356 (Source : in out Super_String;
357 Low : Positive;
358 High : Natural;
359 By : Wide_Wide_String;
360 Drop : Truncation := Error);
362 function Super_Insert
363 (Source : Super_String;
364 Before : Positive;
365 New_Item : Wide_Wide_String;
366 Drop : Truncation := Error) return Super_String;
368 procedure Super_Insert
369 (Source : in out Super_String;
370 Before : Positive;
371 New_Item : Wide_Wide_String;
372 Drop : Truncation := Error);
374 function Super_Overwrite
375 (Source : Super_String;
376 Position : Positive;
377 New_Item : Wide_Wide_String;
378 Drop : Truncation := Error) return Super_String;
380 procedure Super_Overwrite
381 (Source : in out Super_String;
382 Position : Positive;
383 New_Item : Wide_Wide_String;
384 Drop : Truncation := Error);
386 function Super_Delete
387 (Source : Super_String;
388 From : Positive;
389 Through : Natural) return Super_String;
391 procedure Super_Delete
392 (Source : in out Super_String;
393 From : Positive;
394 Through : Natural);
396 ---------------------------------
397 -- String Selector Subprograms --
398 ---------------------------------
400 function Super_Trim
401 (Source : Super_String;
402 Side : Trim_End) return Super_String;
404 procedure Super_Trim
405 (Source : in out Super_String;
406 Side : Trim_End);
408 function Super_Trim
409 (Source : Super_String;
410 Left : Wide_Wide_Maps.Wide_Wide_Character_Set;
411 Right : Wide_Wide_Maps.Wide_Wide_Character_Set) return Super_String;
413 procedure Super_Trim
414 (Source : in out Super_String;
415 Left : Wide_Wide_Maps.Wide_Wide_Character_Set;
416 Right : Wide_Wide_Maps.Wide_Wide_Character_Set);
418 function Super_Head
419 (Source : Super_String;
420 Count : Natural;
421 Pad : Wide_Wide_Character := Wide_Wide_Space;
422 Drop : Truncation := Error) return Super_String;
424 procedure Super_Head
425 (Source : in out Super_String;
426 Count : Natural;
427 Pad : Wide_Wide_Character := Wide_Wide_Space;
428 Drop : Truncation := Error);
430 function Super_Tail
431 (Source : Super_String;
432 Count : Natural;
433 Pad : Wide_Wide_Character := Wide_Wide_Space;
434 Drop : Truncation := Error) return Super_String;
436 procedure Super_Tail
437 (Source : in out Super_String;
438 Count : Natural;
439 Pad : Wide_Wide_Character := Wide_Wide_Space;
440 Drop : Truncation := Error);
442 ------------------------------------
443 -- String Constructor Subprograms --
444 ------------------------------------
446 -- Note: in some of the following routines, there is an extra parameter
447 -- Max_Length which specifies the value of the maximum length for the
448 -- resulting Super_String value.
450 function Times
451 (Left : Natural;
452 Right : Wide_Wide_Character;
453 Max_Length : Positive) return Super_String;
454 -- Note the additional parameter Max_Length
456 function Times
457 (Left : Natural;
458 Right : Wide_Wide_String;
459 Max_Length : Positive) return Super_String;
460 -- Note the additional parameter Max_Length
462 function Times
463 (Left : Natural;
464 Right : Super_String) return Super_String;
466 function Super_Replicate
467 (Count : Natural;
468 Item : Wide_Wide_Character;
469 Drop : Truncation := Error;
470 Max_Length : Positive) return Super_String;
471 -- Note the additional parameter Max_Length
473 function Super_Replicate
474 (Count : Natural;
475 Item : Wide_Wide_String;
476 Drop : Truncation := Error;
477 Max_Length : Positive) return Super_String;
478 -- Note the additional parameter Max_Length
480 function Super_Replicate
481 (Count : Natural;
482 Item : Super_String;
483 Drop : Truncation := Error) return Super_String;
485 private
486 -- Pragma Inline declarations
488 pragma Inline ("=");
489 pragma Inline (Less);
490 pragma Inline (Less_Or_Equal);
491 pragma Inline (Greater);
492 pragma Inline (Greater_Or_Equal);
493 pragma Inline (Concat);
494 pragma Inline (Super_Count);
495 pragma Inline (Super_Element);
496 pragma Inline (Super_Find_Token);
497 pragma Inline (Super_Index);
498 pragma Inline (Super_Index_Non_Blank);
499 pragma Inline (Super_Length);
500 pragma Inline (Super_Replace_Element);
501 pragma Inline (Super_Slice);
502 pragma Inline (Super_To_String);
504 end Ada.Strings.Wide_Wide_Superbounded;