1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
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 --
9 -- Copyright (C) 2003-2010, Free Software Foundation, Inc. --
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. --
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. --
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/>. --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
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
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
);
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
;
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
);
86 Drop
: Truncation
:= Error
) return Super_String
;
90 Right
: Wide_Wide_String
;
91 Drop
: Truncation
:= Error
) return Super_String
;
94 (Left
: Wide_Wide_String
;
96 Drop
: Truncation
:= Error
) return 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
);
124 (Left
: Super_String
;
125 Right
: Super_String
) return Super_String
;
128 (Left
: Super_String
;
129 Right
: Wide_Wide_String
) return Super_String
;
132 (Left
: Wide_Wide_String
;
133 Right
: Super_String
) return Super_String
;
136 (Left
: Super_String
;
137 Right
: Wide_Wide_Character
) return Super_String
;
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
;
150 By
: Wide_Wide_Character
);
153 (Source
: Super_String
;
155 High
: Natural) return Wide_Wide_String
;
158 (Source
: Super_String
;
160 High
: Natural) return Super_String
;
162 procedure Super_Slice
163 (Source
: Super_String
;
164 Target
: out Super_String
;
169 (Left
: Super_String
;
170 Right
: Super_String
) return Boolean;
173 (Left
: Super_String
;
174 Right
: Super_String
) return Boolean renames "=";
177 (Left
: Super_String
;
178 Right
: Wide_Wide_String
) return Boolean;
181 (Left
: Wide_Wide_String
;
182 Right
: Super_String
) return Boolean;
185 (Left
: Super_String
;
186 Right
: Super_String
) return Boolean;
189 (Left
: Super_String
;
190 Right
: Wide_Wide_String
) return Boolean;
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;
209 (Left
: Super_String
;
210 Right
: Super_String
) return Boolean;
213 (Left
: Super_String
;
214 Right
: Wide_Wide_String
) return Boolean;
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 ----------------------
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
)
245 (Source
: Super_String
;
246 Pattern
: Wide_Wide_String
;
247 Going
: Direction
:= Forward
;
248 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping_Function
)
252 (Source
: Super_String
;
253 Set
: Wide_Wide_Maps
.Wide_Wide_Character_Set
;
254 Test
: Membership
:= Inside
;
255 Going
: Direction
:= Forward
) return Natural;
258 (Source
: Super_String
;
259 Pattern
: Wide_Wide_String
;
261 Going
: Direction
:= Forward
;
262 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping
:=
263 Wide_Wide_Maps
.Identity
)
267 (Source
: Super_String
;
268 Pattern
: Wide_Wide_String
;
270 Going
: Direction
:= Forward
;
271 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping_Function
)
275 (Source
: Super_String
;
276 Set
: Wide_Wide_Maps
.Wide_Wide_Character_Set
;
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
;
288 Going
: Direction
:= Forward
) return Natural;
291 (Source
: Super_String
;
292 Pattern
: Wide_Wide_String
;
293 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping
:=
294 Wide_Wide_Maps
.Identity
)
298 (Source
: Super_String
;
299 Pattern
: Wide_Wide_String
;
300 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping_Function
)
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
;
312 First
: out Positive;
315 procedure Super_Find_Token
316 (Source
: Super_String
;
317 Set
: Wide_Wide_Maps
.Wide_Wide_Character_Set
;
319 First
: out Positive;
322 ------------------------------------
323 -- String Translation Subprograms --
324 ------------------------------------
326 function Super_Translate
327 (Source
: Super_String
;
328 Mapping
: Wide_Wide_Maps
.Wide_Wide_Character_Mapping
)
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
)
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
;
352 By
: Wide_Wide_String
;
353 Drop
: Truncation
:= Error
) return Super_String
;
355 procedure Super_Replace_Slice
356 (Source
: in out Super_String
;
359 By
: Wide_Wide_String
;
360 Drop
: Truncation
:= Error
);
362 function Super_Insert
363 (Source
: Super_String
;
365 New_Item
: Wide_Wide_String
;
366 Drop
: Truncation
:= Error
) return Super_String
;
368 procedure Super_Insert
369 (Source
: in out Super_String
;
371 New_Item
: Wide_Wide_String
;
372 Drop
: Truncation
:= Error
);
374 function Super_Overwrite
375 (Source
: Super_String
;
377 New_Item
: Wide_Wide_String
;
378 Drop
: Truncation
:= Error
) return Super_String
;
380 procedure Super_Overwrite
381 (Source
: in out Super_String
;
383 New_Item
: Wide_Wide_String
;
384 Drop
: Truncation
:= Error
);
386 function Super_Delete
387 (Source
: Super_String
;
389 Through
: Natural) return Super_String
;
391 procedure Super_Delete
392 (Source
: in out Super_String
;
396 ---------------------------------
397 -- String Selector Subprograms --
398 ---------------------------------
401 (Source
: Super_String
;
402 Side
: Trim_End
) return Super_String
;
405 (Source
: in out Super_String
;
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
;
414 (Source
: in out Super_String
;
415 Left
: Wide_Wide_Maps
.Wide_Wide_Character_Set
;
416 Right
: Wide_Wide_Maps
.Wide_Wide_Character_Set
);
419 (Source
: Super_String
;
421 Pad
: Wide_Wide_Character
:= Wide_Wide_Space
;
422 Drop
: Truncation
:= Error
) return Super_String
;
425 (Source
: in out Super_String
;
427 Pad
: Wide_Wide_Character
:= Wide_Wide_Space
;
428 Drop
: Truncation
:= Error
);
431 (Source
: Super_String
;
433 Pad
: Wide_Wide_Character
:= Wide_Wide_Space
;
434 Drop
: Truncation
:= Error
) return Super_String
;
437 (Source
: in out Super_String
;
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.
452 Right
: Wide_Wide_Character
;
453 Max_Length
: Positive) return Super_String
;
454 -- Note the additional parameter Max_Length
458 Right
: Wide_Wide_String
;
459 Max_Length
: Positive) return Super_String
;
460 -- Note the additional parameter Max_Length
464 Right
: Super_String
) return Super_String
;
466 function Super_Replicate
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
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
483 Drop
: Truncation
:= Error
) return Super_String
;
486 -- Pragma Inline declarations
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
;