1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- A D A . S T R I N G S . W I D E _ B O U N D E D --
9 -- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
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. --
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. --
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. --
33 -- GNAT was originally developed by the GNAT team at New York University. --
34 -- Extensive contributions were provided by Ada Core Technologies Inc. --
36 ------------------------------------------------------------------------------
38 with Ada
.Strings
.Wide_Maps
;
39 with Ada
.Strings
.Wide_Superbounded
;
41 package Ada
.Strings
.Wide_Bounded
is
42 pragma Preelaborate
(Wide_Bounded
);
46 -- Maximum length of a Bounded_Wide_String
48 package Generic_Bounded_Length
is
50 Max_Length
: constant Positive := Max
;
52 type Bounded_Wide_String
is private;
54 Null_Bounded_Wide_String
: constant Bounded_Wide_String
;
56 subtype Length_Range
is Natural range 0 .. Max_Length
;
58 function Length
(Source
: in Bounded_Wide_String
) return Length_Range
;
60 --------------------------------------------------------
61 -- Conversion, Concatenation, and Selection Functions --
62 --------------------------------------------------------
64 function To_Bounded_Wide_String
65 (Source
: in Wide_String;
66 Drop
: in Truncation
:= Error
)
67 return Bounded_Wide_String
;
69 function To_Wide_String
70 (Source
: in Bounded_Wide_String
)
74 (Left
, Right
: in Bounded_Wide_String
;
75 Drop
: in Truncation
:= Error
)
76 return Bounded_Wide_String
;
79 (Left
: in Bounded_Wide_String
;
80 Right
: in Wide_String;
81 Drop
: in Truncation
:= Error
)
82 return Bounded_Wide_String
;
85 (Left
: in Wide_String;
86 Right
: in Bounded_Wide_String
;
87 Drop
: in Truncation
:= Error
)
88 return Bounded_Wide_String
;
91 (Left
: in Bounded_Wide_String
;
92 Right
: in Wide_Character;
93 Drop
: in Truncation
:= Error
)
94 return Bounded_Wide_String
;
97 (Left
: in Wide_Character;
98 Right
: in Bounded_Wide_String
;
99 Drop
: in Truncation
:= Error
)
100 return Bounded_Wide_String
;
103 (Source
: in out Bounded_Wide_String
;
104 New_Item
: in Bounded_Wide_String
;
105 Drop
: in Truncation
:= Error
);
108 (Source
: in out Bounded_Wide_String
;
109 New_Item
: in Wide_String;
110 Drop
: in Truncation
:= Error
);
113 (Source
: in out Bounded_Wide_String
;
114 New_Item
: in Wide_Character;
115 Drop
: in Truncation
:= Error
);
118 (Left
, Right
: in Bounded_Wide_String
)
119 return Bounded_Wide_String
;
122 (Left
: in Bounded_Wide_String
;
123 Right
: in Wide_String)
124 return Bounded_Wide_String
;
127 (Left
: in Wide_String;
128 Right
: in Bounded_Wide_String
)
129 return Bounded_Wide_String
;
132 (Left
: in Bounded_Wide_String
;
133 Right
: in Wide_Character)
134 return Bounded_Wide_String
;
137 (Left
: in Wide_Character;
138 Right
: in Bounded_Wide_String
)
139 return Bounded_Wide_String
;
142 (Source
: in Bounded_Wide_String
;
144 return Wide_Character;
146 procedure Replace_Element
147 (Source
: in out Bounded_Wide_String
;
149 By
: in Wide_Character);
152 (Source
: in Bounded_Wide_String
;
158 (Left
: in Bounded_Wide_String
;
159 Right
: in Bounded_Wide_String
)
163 (Left
: in Bounded_Wide_String
;
164 Right
: in Wide_String)
168 (Left
: in Wide_String;
169 Right
: in Bounded_Wide_String
)
173 (Left
: in Bounded_Wide_String
;
174 Right
: in Bounded_Wide_String
)
178 (Left
: in Bounded_Wide_String
;
179 Right
: in Wide_String)
183 (Left
: in Wide_String;
184 Right
: in Bounded_Wide_String
)
188 (Left
: in Bounded_Wide_String
;
189 Right
: in Bounded_Wide_String
)
193 (Left
: in Bounded_Wide_String
;
194 Right
: in Wide_String)
198 (Left
: in Wide_String;
199 Right
: in Bounded_Wide_String
)
203 (Left
: in Bounded_Wide_String
;
204 Right
: in Bounded_Wide_String
)
208 (Left
: in Bounded_Wide_String
;
209 Right
: in Wide_String)
213 (Left
: in Wide_String;
214 Right
: in Bounded_Wide_String
)
218 (Left
: in Bounded_Wide_String
;
219 Right
: in Bounded_Wide_String
)
223 (Left
: in Bounded_Wide_String
;
224 Right
: in Wide_String)
228 (Left
: in Wide_String;
229 Right
: in Bounded_Wide_String
)
232 ----------------------
233 -- Search Functions --
234 ----------------------
237 (Source
: in Bounded_Wide_String
;
238 Pattern
: in Wide_String;
239 Going
: in Direction
:= Forward
;
240 Mapping
: in Wide_Maps
.Wide_Character_Mapping
:= Wide_Maps
.Identity
)
244 (Source
: in Bounded_Wide_String
;
245 Pattern
: in Wide_String;
246 Going
: in Direction
:= Forward
;
247 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
251 (Source
: in Bounded_Wide_String
;
252 Set
: in Wide_Maps
.Wide_Character_Set
;
253 Test
: in Membership
:= Inside
;
254 Going
: in Direction
:= Forward
)
257 function Index_Non_Blank
258 (Source
: in Bounded_Wide_String
;
259 Going
: in Direction
:= Forward
)
263 (Source
: in Bounded_Wide_String
;
264 Pattern
: in Wide_String;
265 Mapping
: in Wide_Maps
.Wide_Character_Mapping
:= Wide_Maps
.Identity
)
269 (Source
: in Bounded_Wide_String
;
270 Pattern
: in Wide_String;
271 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
275 (Source
: in Bounded_Wide_String
;
276 Set
: in Wide_Maps
.Wide_Character_Set
)
280 (Source
: in Bounded_Wide_String
;
281 Set
: in Wide_Maps
.Wide_Character_Set
;
282 Test
: in Membership
;
283 First
: out Positive;
286 ------------------------------------
287 -- Wide_String Translation Subprograms --
288 ------------------------------------
291 (Source
: in Bounded_Wide_String
;
292 Mapping
: in Wide_Maps
.Wide_Character_Mapping
)
293 return Bounded_Wide_String
;
296 (Source
: in out Bounded_Wide_String
;
297 Mapping
: in Wide_Maps
.Wide_Character_Mapping
);
300 (Source
: in Bounded_Wide_String
;
301 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
302 return Bounded_Wide_String
;
305 (Source
: in out Bounded_Wide_String
;
306 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
);
308 ---------------------------------------
309 -- Wide_String Transformation Subprograms --
310 ---------------------------------------
312 function Replace_Slice
313 (Source
: in Bounded_Wide_String
;
317 Drop
: in Truncation
:= Error
)
318 return Bounded_Wide_String
;
320 procedure Replace_Slice
321 (Source
: in out Bounded_Wide_String
;
325 Drop
: in Truncation
:= Error
);
328 (Source
: in Bounded_Wide_String
;
329 Before
: in Positive;
330 New_Item
: in Wide_String;
331 Drop
: in Truncation
:= Error
)
332 return Bounded_Wide_String
;
335 (Source
: in out Bounded_Wide_String
;
336 Before
: in Positive;
337 New_Item
: in Wide_String;
338 Drop
: in Truncation
:= Error
);
341 (Source
: in Bounded_Wide_String
;
342 Position
: in Positive;
343 New_Item
: in Wide_String;
344 Drop
: in Truncation
:= Error
)
345 return Bounded_Wide_String
;
348 (Source
: in out Bounded_Wide_String
;
349 Position
: in Positive;
350 New_Item
: in Wide_String;
351 Drop
: in Truncation
:= Error
);
354 (Source
: in Bounded_Wide_String
;
356 Through
: in Natural)
357 return Bounded_Wide_String
;
360 (Source
: in out Bounded_Wide_String
;
362 Through
: in Natural);
364 ---------------------------------
365 -- Wide_String Selector Subprograms --
366 ---------------------------------
369 (Source
: in Bounded_Wide_String
;
371 return Bounded_Wide_String
;
374 (Source
: in out Bounded_Wide_String
;
378 (Source
: in Bounded_Wide_String
;
379 Left
: in Wide_Maps
.Wide_Character_Set
;
380 Right
: in Wide_Maps
.Wide_Character_Set
)
381 return Bounded_Wide_String
;
384 (Source
: in out Bounded_Wide_String
;
385 Left
: in Wide_Maps
.Wide_Character_Set
;
386 Right
: in Wide_Maps
.Wide_Character_Set
);
389 (Source
: in Bounded_Wide_String
;
391 Pad
: in Wide_Character := Wide_Space
;
392 Drop
: in Truncation
:= Error
)
393 return Bounded_Wide_String
;
396 (Source
: in out Bounded_Wide_String
;
398 Pad
: in Wide_Character := Wide_Space
;
399 Drop
: in Truncation
:= Error
);
402 (Source
: in Bounded_Wide_String
;
404 Pad
: in Wide_Character := Wide_Space
;
405 Drop
: in Truncation
:= Error
)
406 return Bounded_Wide_String
;
409 (Source
: in out Bounded_Wide_String
;
411 Pad
: in Wide_Character := Wide_Space
;
412 Drop
: in Truncation
:= Error
);
414 ------------------------------------
415 -- Wide_String Constructor Subprograms --
416 ------------------------------------
420 Right
: in Wide_Character)
421 return Bounded_Wide_String
;
425 Right
: in Wide_String)
426 return Bounded_Wide_String
;
430 Right
: in Bounded_Wide_String
)
431 return Bounded_Wide_String
;
435 Item
: in Wide_Character;
436 Drop
: in Truncation
:= Error
)
437 return Bounded_Wide_String
;
441 Item
: in Wide_String;
442 Drop
: in Truncation
:= Error
)
443 return Bounded_Wide_String
;
447 Item
: in Bounded_Wide_String
;
448 Drop
: in Truncation
:= Error
)
449 return Bounded_Wide_String
;
453 -- Most of the implementation is in the non generic package
454 -- Ada.Strings.Superbounded. Type Bounded_Wide_String is derived from
455 -- type Wide_Superbounded.Super_String with the maximum length
456 -- constraint. Except for five, all subprograms are renames of
457 -- subprograms that are inherited from Wide_Superbounded.Super_String.
459 type Bounded_Wide_String
is
460 new Wide_Superbounded
.Super_String
(Max_Length
);
462 Null_Bounded_Wide_String
: constant Bounded_Wide_String
:=
463 (Max_Length
=> Max_Length
,
465 Data
=> (1 .. Max_Length
=> Wide_Superbounded
.Wide_NUL
));
467 pragma Inline
(To_Bounded_Wide_String
);
469 function Length
(Source
: in Bounded_Wide_String
) return Length_Range
470 renames Super_Length
;
472 function To_Wide_String
473 (Source
: in Bounded_Wide_String
)
475 renames Super_To_String
;
478 (Left
, Right
: in Bounded_Wide_String
;
479 Drop
: in Truncation
:= Error
)
480 return Bounded_Wide_String
481 renames Super_Append
;
484 (Left
: in Bounded_Wide_String
;
485 Right
: in Wide_String;
486 Drop
: in Truncation
:= Error
)
487 return Bounded_Wide_String
488 renames Super_Append
;
491 (Left
: in Wide_String;
492 Right
: in Bounded_Wide_String
;
493 Drop
: in Truncation
:= Error
)
494 return Bounded_Wide_String
495 renames Super_Append
;
498 (Left
: in Bounded_Wide_String
;
499 Right
: in Wide_Character;
500 Drop
: in Truncation
:= Error
)
501 return Bounded_Wide_String
502 renames Super_Append
;
505 (Left
: in Wide_Character;
506 Right
: in Bounded_Wide_String
;
507 Drop
: in Truncation
:= Error
)
508 return Bounded_Wide_String
509 renames Super_Append
;
512 (Source
: in out Bounded_Wide_String
;
513 New_Item
: in Bounded_Wide_String
;
514 Drop
: in Truncation
:= Error
)
515 renames Super_Append
;
518 (Source
: in out Bounded_Wide_String
;
519 New_Item
: in Wide_String;
520 Drop
: in Truncation
:= Error
)
521 renames Super_Append
;
524 (Source
: in out Bounded_Wide_String
;
525 New_Item
: in Wide_Character;
526 Drop
: in Truncation
:= Error
)
527 renames Super_Append
;
530 (Left
, Right
: in Bounded_Wide_String
)
531 return Bounded_Wide_String
535 (Left
: in Bounded_Wide_String
;
536 Right
: in Wide_String)
537 return Bounded_Wide_String
541 (Left
: in Wide_String;
542 Right
: in Bounded_Wide_String
)
543 return Bounded_Wide_String
547 (Left
: in Bounded_Wide_String
;
548 Right
: in Wide_Character)
549 return Bounded_Wide_String
553 (Left
: in Wide_Character;
554 Right
: in Bounded_Wide_String
)
555 return Bounded_Wide_String
559 (Source
: in Bounded_Wide_String
;
561 return Wide_Character
562 renames Super_Element
;
564 procedure Replace_Element
565 (Source
: in out Bounded_Wide_String
;
567 By
: in Wide_Character)
568 renames Super_Replace_Element
;
571 (Source
: in Bounded_Wide_String
;
577 function "=" (Left
, Right
: in Bounded_Wide_String
) return Boolean
581 (Left
: in Bounded_Wide_String
;
582 Right
: in Wide_String)
587 (Left
: in Wide_String;
588 Right
: in Bounded_Wide_String
)
592 function "<" (Left
, Right
: in Bounded_Wide_String
) return Boolean
596 (Left
: in Bounded_Wide_String
;
597 Right
: in Wide_String)
602 (Left
: in Wide_String;
603 Right
: in Bounded_Wide_String
)
607 function "<=" (Left
, Right
: in Bounded_Wide_String
) return Boolean
608 renames Less_Or_Equal
;
611 (Left
: in Bounded_Wide_String
;
612 Right
: in Wide_String)
614 renames Less_Or_Equal
;
617 (Left
: in Wide_String;
618 Right
: in Bounded_Wide_String
)
620 renames Less_Or_Equal
;
622 function ">" (Left
, Right
: in Bounded_Wide_String
) return Boolean
626 (Left
: in Bounded_Wide_String
;
627 Right
: in Wide_String)
632 (Left
: in Wide_String;
633 Right
: in Bounded_Wide_String
)
637 function ">=" (Left
, Right
: in Bounded_Wide_String
) return Boolean
638 renames Greater_Or_Equal
;
641 (Left
: in Bounded_Wide_String
;
642 Right
: in Wide_String)
644 renames Greater_Or_Equal
;
647 (Left
: in Wide_String;
648 Right
: in Bounded_Wide_String
)
650 renames Greater_Or_Equal
;
653 (Source
: in Bounded_Wide_String
;
654 Pattern
: in Wide_String;
655 Going
: in Direction
:= Forward
;
656 Mapping
: in Wide_Maps
.Wide_Character_Mapping
:= Wide_Maps
.Identity
)
661 (Source
: in Bounded_Wide_String
;
662 Pattern
: in Wide_String;
663 Going
: in Direction
:= Forward
;
664 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
669 (Source
: in Bounded_Wide_String
;
670 Set
: in Wide_Maps
.Wide_Character_Set
;
671 Test
: in Membership
:= Inside
;
672 Going
: in Direction
:= Forward
)
676 function Index_Non_Blank
677 (Source
: in Bounded_Wide_String
;
678 Going
: in Direction
:= Forward
)
680 renames Super_Index_Non_Blank
;
683 (Source
: in Bounded_Wide_String
;
684 Pattern
: in Wide_String;
685 Mapping
: in Wide_Maps
.Wide_Character_Mapping
:= Wide_Maps
.Identity
)
690 (Source
: in Bounded_Wide_String
;
691 Pattern
: in Wide_String;
692 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
697 (Source
: in Bounded_Wide_String
;
698 Set
: in Wide_Maps
.Wide_Character_Set
)
703 (Source
: in Bounded_Wide_String
;
704 Set
: in Wide_Maps
.Wide_Character_Set
;
705 Test
: in Membership
;
706 First
: out Positive;
708 renames Super_Find_Token
;
711 (Source
: in Bounded_Wide_String
;
712 Mapping
: in Wide_Maps
.Wide_Character_Mapping
)
713 return Bounded_Wide_String
714 renames Super_Translate
;
717 (Source
: in out Bounded_Wide_String
;
718 Mapping
: in Wide_Maps
.Wide_Character_Mapping
)
719 renames Super_Translate
;
722 (Source
: in Bounded_Wide_String
;
723 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
724 return Bounded_Wide_String
725 renames Super_Translate
;
728 (Source
: in out Bounded_Wide_String
;
729 Mapping
: in Wide_Maps
.Wide_Character_Mapping_Function
)
730 renames Super_Translate
;
732 function Replace_Slice
733 (Source
: in Bounded_Wide_String
;
737 Drop
: in Truncation
:= Error
)
738 return Bounded_Wide_String
739 renames Super_Replace_Slice
;
741 procedure Replace_Slice
742 (Source
: in out Bounded_Wide_String
;
746 Drop
: in Truncation
:= Error
)
747 renames Super_Replace_Slice
;
750 (Source
: in Bounded_Wide_String
;
751 Before
: in Positive;
752 New_Item
: in Wide_String;
753 Drop
: in Truncation
:= Error
)
754 return Bounded_Wide_String
755 renames Super_Insert
;
758 (Source
: in out Bounded_Wide_String
;
759 Before
: in Positive;
760 New_Item
: in Wide_String;
761 Drop
: in Truncation
:= Error
)
762 renames Super_Insert
;
765 (Source
: in Bounded_Wide_String
;
766 Position
: in Positive;
767 New_Item
: in Wide_String;
768 Drop
: in Truncation
:= Error
)
769 return Bounded_Wide_String
770 renames Super_Overwrite
;
773 (Source
: in out Bounded_Wide_String
;
774 Position
: in Positive;
775 New_Item
: in Wide_String;
776 Drop
: in Truncation
:= Error
)
777 renames Super_Overwrite
;
780 (Source
: in Bounded_Wide_String
;
782 Through
: in Natural)
783 return Bounded_Wide_String
784 renames Super_Delete
;
787 (Source
: in out Bounded_Wide_String
;
789 Through
: in Natural)
790 renames Super_Delete
;
793 (Source
: in Bounded_Wide_String
;
795 return Bounded_Wide_String
799 (Source
: in out Bounded_Wide_String
;
804 (Source
: in Bounded_Wide_String
;
805 Left
: in Wide_Maps
.Wide_Character_Set
;
806 Right
: in Wide_Maps
.Wide_Character_Set
)
807 return Bounded_Wide_String
811 (Source
: in out Bounded_Wide_String
;
812 Left
: in Wide_Maps
.Wide_Character_Set
;
813 Right
: in Wide_Maps
.Wide_Character_Set
)
817 (Source
: in Bounded_Wide_String
;
819 Pad
: in Wide_Character := Wide_Space
;
820 Drop
: in Truncation
:= Error
)
821 return Bounded_Wide_String
825 (Source
: in out Bounded_Wide_String
;
827 Pad
: in Wide_Character := Wide_Space
;
828 Drop
: in Truncation
:= Error
)
832 (Source
: in Bounded_Wide_String
;
834 Pad
: in Wide_Character := Wide_Space
;
835 Drop
: in Truncation
:= Error
)
836 return Bounded_Wide_String
840 (Source
: in out Bounded_Wide_String
;
842 Pad
: in Wide_Character := Wide_Space
;
843 Drop
: in Truncation
:= Error
)
848 Right
: in Bounded_Wide_String
)
849 return Bounded_Wide_String
854 Item
: in Bounded_Wide_String
;
855 Drop
: in Truncation
:= Error
)
856 return Bounded_Wide_String
857 renames Super_Replicate
;
859 end Generic_Bounded_Length
;
861 end Ada
.Strings
.Wide_Bounded
;