File : a-stwibo.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --             A D A . S T R I N G S . W I D E _ B O U N D E D              --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2015, 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 --                                                                          --
  23 --                                                                          --
  24 --                                                                          --
  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.Strings.Wide_Superbounded;
  38 
  39 package Ada.Strings.Wide_Bounded is
  40    pragma Preelaborate;
  41 
  42    generic
  43       Max : Positive;
  44       --  Maximum length of a Bounded_Wide_String
  45 
  46    package Generic_Bounded_Length is
  47 
  48       Max_Length : constant Positive := Max;
  49 
  50       type Bounded_Wide_String is private;
  51       pragma Preelaborable_Initialization (Bounded_Wide_String);
  52 
  53       Null_Bounded_Wide_String : constant Bounded_Wide_String;
  54 
  55       subtype Length_Range is Natural range 0 .. Max_Length;
  56 
  57       function Length (Source : Bounded_Wide_String) return Length_Range;
  58 
  59       --------------------------------------------------------
  60       -- Conversion, Concatenation, and Selection Functions --
  61       --------------------------------------------------------
  62 
  63       function To_Bounded_Wide_String
  64         (Source : Wide_String;
  65          Drop   : Truncation := Error) return Bounded_Wide_String;
  66 
  67       function To_Wide_String
  68         (Source : Bounded_Wide_String) return Wide_String;
  69 
  70       procedure Set_Bounded_Wide_String
  71         (Target : out Bounded_Wide_String;
  72          Source : Wide_String;
  73          Drop   : Truncation := Error);
  74       pragma Ada_05 (Set_Bounded_Wide_String);
  75 
  76       function Append
  77         (Left  : Bounded_Wide_String;
  78          Right : Bounded_Wide_String;
  79          Drop  : Truncation  := Error) return Bounded_Wide_String;
  80 
  81       function Append
  82         (Left  : Bounded_Wide_String;
  83          Right : Wide_String;
  84          Drop  : Truncation := Error) return Bounded_Wide_String;
  85 
  86       function Append
  87         (Left  : Wide_String;
  88          Right : Bounded_Wide_String;
  89          Drop  : Truncation := Error) return Bounded_Wide_String;
  90 
  91       function Append
  92         (Left  : Bounded_Wide_String;
  93          Right : Wide_Character;
  94          Drop  : Truncation := Error) return Bounded_Wide_String;
  95 
  96       function Append
  97         (Left  : Wide_Character;
  98          Right : Bounded_Wide_String;
  99          Drop  : Truncation := Error) return Bounded_Wide_String;
 100 
 101       procedure Append
 102         (Source   : in out Bounded_Wide_String;
 103          New_Item : Bounded_Wide_String;
 104          Drop     : Truncation  := Error);
 105 
 106       procedure Append
 107         (Source   : in out Bounded_Wide_String;
 108          New_Item : Wide_String;
 109          Drop     : Truncation  := Error);
 110 
 111       procedure Append
 112         (Source   : in out Bounded_Wide_String;
 113          New_Item : Wide_Character;
 114          Drop     : Truncation  := Error);
 115 
 116       function "&"
 117         (Left  : Bounded_Wide_String;
 118          Right : Bounded_Wide_String) return Bounded_Wide_String;
 119 
 120       function "&"
 121         (Left  : Bounded_Wide_String;
 122          Right : Wide_String) return Bounded_Wide_String;
 123 
 124       function "&"
 125         (Left  : Wide_String;
 126          Right : Bounded_Wide_String) return Bounded_Wide_String;
 127 
 128       function "&"
 129         (Left  : Bounded_Wide_String;
 130          Right : Wide_Character) return Bounded_Wide_String;
 131 
 132       function "&"
 133         (Left  : Wide_Character;
 134          Right : Bounded_Wide_String) return Bounded_Wide_String;
 135 
 136       function Element
 137         (Source : Bounded_Wide_String;
 138          Index  : Positive) return Wide_Character;
 139 
 140       procedure Replace_Element
 141         (Source : in out Bounded_Wide_String;
 142          Index  : Positive;
 143          By     : Wide_Character);
 144 
 145       function Slice
 146         (Source : Bounded_Wide_String;
 147          Low    : Positive;
 148          High   : Natural) return Wide_String;
 149 
 150       function Bounded_Slice
 151         (Source : Bounded_Wide_String;
 152          Low    : Positive;
 153          High   : Natural) return Bounded_Wide_String;
 154       pragma Ada_05 (Bounded_Slice);
 155 
 156       procedure Bounded_Slice
 157         (Source : Bounded_Wide_String;
 158          Target : out Bounded_Wide_String;
 159          Low    : Positive;
 160          High   : Natural);
 161       pragma Ada_05 (Bounded_Slice);
 162 
 163       function "="
 164         (Left  : Bounded_Wide_String;
 165          Right : Bounded_Wide_String) return Boolean;
 166 
 167       function "="
 168         (Left  : Bounded_Wide_String;
 169          Right : Wide_String) return Boolean;
 170 
 171       function "="
 172         (Left  : Wide_String;
 173          Right : Bounded_Wide_String) return Boolean;
 174 
 175       function "<"
 176         (Left  : Bounded_Wide_String;
 177          Right : Bounded_Wide_String) return Boolean;
 178 
 179       function "<"
 180         (Left  : Bounded_Wide_String;
 181          Right : Wide_String) return Boolean;
 182 
 183       function "<"
 184         (Left  : Wide_String;
 185          Right : Bounded_Wide_String) return Boolean;
 186 
 187       function "<="
 188         (Left  : Bounded_Wide_String;
 189          Right : Bounded_Wide_String) return Boolean;
 190 
 191       function "<="
 192         (Left  : Bounded_Wide_String;
 193          Right : Wide_String) return Boolean;
 194 
 195       function "<="
 196         (Left  : Wide_String;
 197          Right : Bounded_Wide_String) return Boolean;
 198 
 199       function ">"
 200         (Left  : Bounded_Wide_String;
 201          Right : Bounded_Wide_String) return Boolean;
 202 
 203       function ">"
 204         (Left  : Bounded_Wide_String;
 205          Right : Wide_String) return Boolean;
 206 
 207       function ">"
 208         (Left  : Wide_String;
 209          Right : Bounded_Wide_String) return Boolean;
 210 
 211       function ">="
 212         (Left  : Bounded_Wide_String;
 213          Right : Bounded_Wide_String) return Boolean;
 214 
 215       function ">="
 216         (Left  : Bounded_Wide_String;
 217          Right : Wide_String) return Boolean;
 218 
 219       function ">="
 220         (Left  : Wide_String;
 221          Right : Bounded_Wide_String) return Boolean;
 222 
 223       ----------------------
 224       -- Search Functions --
 225       ----------------------
 226 
 227       function Index
 228         (Source  : Bounded_Wide_String;
 229          Pattern : Wide_String;
 230          Going   : Direction := Forward;
 231          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 232          return Natural;
 233 
 234       function Index
 235         (Source  : Bounded_Wide_String;
 236          Pattern : Wide_String;
 237          Going   : Direction := Forward;
 238          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
 239 
 240       function Index
 241         (Source : Bounded_Wide_String;
 242          Set    : Wide_Maps.Wide_Character_Set;
 243          Test   : Membership := Inside;
 244          Going  : Direction  := Forward) return Natural;
 245 
 246       function Index
 247         (Source  : Bounded_Wide_String;
 248          Pattern : Wide_String;
 249          From    : Positive;
 250          Going   : Direction := Forward;
 251          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 252          return Natural;
 253       pragma Ada_05 (Index);
 254 
 255       function Index
 256         (Source  : Bounded_Wide_String;
 257          Pattern : Wide_String;
 258          From    : Positive;
 259          Going   : Direction := Forward;
 260          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
 261       pragma Ada_05 (Index);
 262 
 263       function Index
 264         (Source  : Bounded_Wide_String;
 265          Set     : Wide_Maps.Wide_Character_Set;
 266          From    : Positive;
 267          Test    : Membership := Inside;
 268          Going   : Direction := Forward) return Natural;
 269       pragma Ada_05 (Index);
 270 
 271       function Index_Non_Blank
 272         (Source : Bounded_Wide_String;
 273          Going  : Direction := Forward) return Natural;
 274 
 275       function Index_Non_Blank
 276         (Source : Bounded_Wide_String;
 277          From   : Positive;
 278          Going  : Direction := Forward) return Natural;
 279       pragma Ada_05 (Index_Non_Blank);
 280 
 281       function Count
 282         (Source  : Bounded_Wide_String;
 283          Pattern : Wide_String;
 284          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 285          return Natural;
 286 
 287       function Count
 288         (Source  : Bounded_Wide_String;
 289          Pattern : Wide_String;
 290          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
 291 
 292       function Count
 293         (Source : Bounded_Wide_String;
 294          Set    : Wide_Maps.Wide_Character_Set) return Natural;
 295 
 296       procedure Find_Token
 297         (Source : Bounded_Wide_String;
 298          Set    : Wide_Maps.Wide_Character_Set;
 299          From   : Positive;
 300          Test   : Membership;
 301          First  : out Positive;
 302          Last   : out Natural);
 303       pragma Ada_2012 (Find_Token);
 304 
 305       procedure Find_Token
 306         (Source : Bounded_Wide_String;
 307          Set    : Wide_Maps.Wide_Character_Set;
 308          Test   : Membership;
 309          First  : out Positive;
 310          Last   : out Natural);
 311 
 312       ------------------------------------
 313       -- String Translation Subprograms --
 314       ------------------------------------
 315 
 316       function Translate
 317         (Source  : Bounded_Wide_String;
 318          Mapping : Wide_Maps.Wide_Character_Mapping)
 319          return Bounded_Wide_String;
 320 
 321       procedure Translate
 322         (Source  : in out Bounded_Wide_String;
 323          Mapping : Wide_Maps.Wide_Character_Mapping);
 324 
 325       function Translate
 326         (Source  : Bounded_Wide_String;
 327          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
 328          return Bounded_Wide_String;
 329 
 330       procedure Translate
 331         (Source  : in out Bounded_Wide_String;
 332          Mapping : Wide_Maps.Wide_Character_Mapping_Function);
 333 
 334       ---------------------------------------
 335       -- String Transformation Subprograms --
 336       ---------------------------------------
 337 
 338       function Replace_Slice
 339         (Source : Bounded_Wide_String;
 340          Low    : Positive;
 341          High   : Natural;
 342          By     : Wide_String;
 343          Drop   : Truncation := Error) return Bounded_Wide_String;
 344 
 345       procedure Replace_Slice
 346         (Source   : in out Bounded_Wide_String;
 347          Low      : Positive;
 348          High     : Natural;
 349          By       : Wide_String;
 350          Drop     : Truncation := Error);
 351 
 352       function Insert
 353         (Source   : Bounded_Wide_String;
 354          Before   : Positive;
 355          New_Item : Wide_String;
 356          Drop     : Truncation := Error) return Bounded_Wide_String;
 357 
 358       procedure Insert
 359         (Source   : in out Bounded_Wide_String;
 360          Before   : Positive;
 361          New_Item : Wide_String;
 362          Drop     : Truncation := Error);
 363 
 364       function Overwrite
 365         (Source   : Bounded_Wide_String;
 366          Position : Positive;
 367          New_Item : Wide_String;
 368          Drop     : Truncation := Error) return Bounded_Wide_String;
 369 
 370       procedure Overwrite
 371         (Source    : in out Bounded_Wide_String;
 372          Position  : Positive;
 373          New_Item  : Wide_String;
 374          Drop      : Truncation := Error);
 375 
 376       function Delete
 377         (Source  : Bounded_Wide_String;
 378          From    : Positive;
 379          Through : Natural) return Bounded_Wide_String;
 380 
 381       procedure Delete
 382         (Source  : in out Bounded_Wide_String;
 383          From    : Positive;
 384          Through : Natural);
 385 
 386       ---------------------------------
 387       -- String Selector Subprograms --
 388       ---------------------------------
 389 
 390       function Trim
 391         (Source : Bounded_Wide_String;
 392          Side   : Trim_End) return Bounded_Wide_String;
 393 
 394       procedure Trim
 395         (Source : in out Bounded_Wide_String;
 396          Side   : Trim_End);
 397 
 398       function Trim
 399         (Source : Bounded_Wide_String;
 400           Left  : Wide_Maps.Wide_Character_Set;
 401           Right : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String;
 402 
 403       procedure Trim
 404         (Source : in out Bounded_Wide_String;
 405          Left   : Wide_Maps.Wide_Character_Set;
 406          Right  : Wide_Maps.Wide_Character_Set);
 407 
 408       function Head
 409         (Source : Bounded_Wide_String;
 410          Count  : Natural;
 411          Pad    : Wide_Character := Wide_Space;
 412          Drop   : Truncation := Error) return Bounded_Wide_String;
 413 
 414       procedure Head
 415         (Source : in out Bounded_Wide_String;
 416          Count  : Natural;
 417          Pad    : Wide_Character  := Wide_Space;
 418          Drop   : Truncation := Error);
 419 
 420       function Tail
 421         (Source : Bounded_Wide_String;
 422          Count  : Natural;
 423          Pad    : Wide_Character := Wide_Space;
 424          Drop   : Truncation     := Error) return Bounded_Wide_String;
 425 
 426       procedure Tail
 427         (Source : in out Bounded_Wide_String;
 428          Count  : Natural;
 429          Pad    : Wide_Character := Wide_Space;
 430          Drop   : Truncation     := Error);
 431 
 432       ------------------------------------
 433       -- String Constructor Subprograms --
 434       ------------------------------------
 435 
 436       function "*"
 437         (Left  : Natural;
 438          Right : Wide_Character) return Bounded_Wide_String;
 439 
 440       function "*"
 441         (Left  : Natural;
 442          Right : Wide_String) return Bounded_Wide_String;
 443 
 444       function "*"
 445         (Left  : Natural;
 446          Right : Bounded_Wide_String) return Bounded_Wide_String;
 447 
 448       function Replicate
 449         (Count : Natural;
 450          Item  : Wide_Character;
 451          Drop  : Truncation := Error) return Bounded_Wide_String;
 452 
 453       function Replicate
 454         (Count : Natural;
 455          Item  : Wide_String;
 456          Drop  : Truncation := Error) return Bounded_Wide_String;
 457 
 458       function Replicate
 459         (Count : Natural;
 460          Item  : Bounded_Wide_String;
 461          Drop  : Truncation := Error) return Bounded_Wide_String;
 462 
 463    private
 464       --  Most of the implementation is in the separate non generic package
 465       --  Ada.Strings.Wide_Superbounded. Type Bounded_Wide_String is derived
 466       --  from type Wide_Superbounded.Super_String with the maximum length
 467       --  constraint. In almost all cases, the routines in Wide_Superbounded
 468       --  can be called with no requirement to pass the maximum length
 469       --  explicitly, since there is at least one Bounded_Wide_String argument
 470       --  from which the maximum length can be obtained. For all such
 471       --  routines, the implementation in this private part is simply a
 472       --  renaming of the corresponding routine in the super bouded package.
 473 
 474       --  The five exceptions are the * and Replicate routines operating on
 475       --  character values. For these cases, we have a routine in the body
 476       --  that calls the superbounded routine passing the maximum length
 477       --  explicitly as an extra parameter.
 478 
 479       type Bounded_Wide_String is
 480         new Wide_Superbounded.Super_String (Max_Length);
 481       --  Deriving Bounded_Wide_String from Wide_Superbounded.Super_String is
 482       --  the real trick, it ensures that the type Bounded_Wide_String
 483       --  declared in the generic instantiation is compatible with the
 484       --  Super_String type declared in the Wide_Superbounded package.
 485 
 486       Null_Bounded_Wide_String : constant Bounded_Wide_String :=
 487                                    (Max_Length         => Max_Length,
 488                                     Current_Length     => 0,
 489                                     Data               =>
 490                                       (1 .. Max_Length =>
 491                                          Wide_Superbounded.Wide_NUL));
 492 
 493       pragma Inline (To_Bounded_Wide_String);
 494 
 495       procedure Set_Bounded_Wide_String
 496         (Target : out Bounded_Wide_String;
 497          Source : Wide_String;
 498          Drop   : Truncation := Error)
 499          renames Set_Super_String;
 500 
 501       function Length
 502         (Source : Bounded_Wide_String) return Length_Range
 503          renames Super_Length;
 504 
 505       function To_Wide_String
 506         (Source : Bounded_Wide_String) return Wide_String
 507          renames Super_To_String;
 508 
 509       function Append
 510         (Left  : Bounded_Wide_String;
 511          Right : Bounded_Wide_String;
 512          Drop  : Truncation  := Error) return Bounded_Wide_String
 513          renames Super_Append;
 514 
 515       function Append
 516         (Left  : Bounded_Wide_String;
 517          Right : Wide_String;
 518          Drop  : Truncation := Error) return Bounded_Wide_String
 519          renames Super_Append;
 520 
 521       function Append
 522         (Left  : Wide_String;
 523          Right : Bounded_Wide_String;
 524          Drop  : Truncation := Error) return Bounded_Wide_String
 525          renames Super_Append;
 526 
 527       function Append
 528         (Left  : Bounded_Wide_String;
 529          Right : Wide_Character;
 530          Drop  : Truncation := Error) return Bounded_Wide_String
 531          renames Super_Append;
 532 
 533       function Append
 534         (Left  : Wide_Character;
 535          Right : Bounded_Wide_String;
 536          Drop  : Truncation := Error) return Bounded_Wide_String
 537          renames Super_Append;
 538 
 539       procedure Append
 540         (Source   : in out Bounded_Wide_String;
 541          New_Item : Bounded_Wide_String;
 542          Drop     : Truncation  := Error)
 543          renames Super_Append;
 544 
 545       procedure Append
 546         (Source   : in out Bounded_Wide_String;
 547          New_Item : Wide_String;
 548          Drop     : Truncation  := Error)
 549          renames Super_Append;
 550 
 551       procedure Append
 552         (Source   : in out Bounded_Wide_String;
 553          New_Item : Wide_Character;
 554          Drop     : Truncation  := Error)
 555          renames Super_Append;
 556 
 557       function "&"
 558         (Left  : Bounded_Wide_String;
 559          Right : Bounded_Wide_String) return Bounded_Wide_String
 560          renames Concat;
 561 
 562       function "&"
 563         (Left  : Bounded_Wide_String;
 564          Right : Wide_String) return Bounded_Wide_String
 565          renames Concat;
 566 
 567       function "&"
 568         (Left  : Wide_String;
 569          Right : Bounded_Wide_String) return Bounded_Wide_String
 570          renames Concat;
 571 
 572       function "&"
 573         (Left  : Bounded_Wide_String;
 574          Right : Wide_Character) return Bounded_Wide_String
 575          renames Concat;
 576 
 577       function "&"
 578         (Left  : Wide_Character;
 579          Right : Bounded_Wide_String) return Bounded_Wide_String
 580          renames Concat;
 581 
 582       function Element
 583         (Source : Bounded_Wide_String;
 584          Index  : Positive) return Wide_Character
 585          renames Super_Element;
 586 
 587       procedure Replace_Element
 588         (Source : in out Bounded_Wide_String;
 589          Index  : Positive;
 590          By     : Wide_Character)
 591          renames Super_Replace_Element;
 592 
 593       function Slice
 594         (Source : Bounded_Wide_String;
 595          Low    : Positive;
 596          High   : Natural) return Wide_String
 597          renames Super_Slice;
 598 
 599       function Bounded_Slice
 600         (Source : Bounded_Wide_String;
 601          Low    : Positive;
 602          High   : Natural) return Bounded_Wide_String
 603          renames Super_Slice;
 604 
 605       procedure Bounded_Slice
 606         (Source : Bounded_Wide_String;
 607          Target : out Bounded_Wide_String;
 608          Low    : Positive;
 609          High   : Natural)
 610          renames Super_Slice;
 611 
 612       overriding function "="
 613         (Left  : Bounded_Wide_String;
 614          Right : Bounded_Wide_String) return Boolean
 615          renames Equal;
 616 
 617       function "="
 618         (Left  : Bounded_Wide_String;
 619          Right : Wide_String) return Boolean
 620          renames Equal;
 621 
 622       function "="
 623         (Left  : Wide_String;
 624          Right : Bounded_Wide_String) return Boolean
 625          renames Equal;
 626 
 627       function "<"
 628         (Left  : Bounded_Wide_String;
 629          Right : Bounded_Wide_String) return Boolean
 630          renames Less;
 631 
 632       function "<"
 633         (Left  : Bounded_Wide_String;
 634          Right : Wide_String) return Boolean
 635          renames Less;
 636 
 637       function "<"
 638         (Left  : Wide_String;
 639          Right : Bounded_Wide_String) return Boolean
 640          renames Less;
 641 
 642       function "<="
 643         (Left  : Bounded_Wide_String;
 644          Right : Bounded_Wide_String) return Boolean
 645          renames Less_Or_Equal;
 646 
 647       function "<="
 648         (Left  : Bounded_Wide_String;
 649          Right : Wide_String) return Boolean
 650          renames Less_Or_Equal;
 651 
 652       function "<="
 653         (Left  : Wide_String;
 654          Right : Bounded_Wide_String) return Boolean
 655          renames Less_Or_Equal;
 656 
 657       function ">"
 658         (Left  : Bounded_Wide_String;
 659          Right : Bounded_Wide_String) return Boolean
 660          renames Greater;
 661 
 662       function ">"
 663         (Left  : Bounded_Wide_String;
 664          Right : Wide_String) return Boolean
 665          renames Greater;
 666 
 667       function ">"
 668         (Left  : Wide_String;
 669          Right : Bounded_Wide_String) return Boolean
 670          renames Greater;
 671 
 672       function ">="
 673         (Left  : Bounded_Wide_String;
 674          Right : Bounded_Wide_String) return Boolean
 675          renames Greater_Or_Equal;
 676 
 677       function ">="
 678         (Left  : Bounded_Wide_String;
 679          Right : Wide_String) return Boolean
 680          renames Greater_Or_Equal;
 681 
 682       function ">="
 683         (Left  : Wide_String;
 684          Right : Bounded_Wide_String) return Boolean
 685          renames Greater_Or_Equal;
 686 
 687       function Index
 688         (Source  : Bounded_Wide_String;
 689          Pattern : Wide_String;
 690          Going   : Direction := Forward;
 691          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 692          return Natural
 693          renames Super_Index;
 694 
 695       function Index
 696         (Source  : Bounded_Wide_String;
 697          Pattern : Wide_String;
 698          Going   : Direction := Forward;
 699          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
 700          renames Super_Index;
 701 
 702       function Index
 703         (Source : Bounded_Wide_String;
 704          Set    : Wide_Maps.Wide_Character_Set;
 705          Test   : Membership := Inside;
 706          Going  : Direction  := Forward) return Natural
 707          renames Super_Index;
 708 
 709       function Index
 710         (Source  : Bounded_Wide_String;
 711          Pattern : Wide_String;
 712          From    : Positive;
 713          Going   : Direction := Forward;
 714          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 715          return Natural
 716          renames Super_Index;
 717 
 718       function Index
 719         (Source  : Bounded_Wide_String;
 720          Pattern : Wide_String;
 721          From    : Positive;
 722          Going   : Direction := Forward;
 723          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
 724       renames Super_Index;
 725 
 726       function Index
 727         (Source  : Bounded_Wide_String;
 728          Set     : Wide_Maps.Wide_Character_Set;
 729          From    : Positive;
 730          Test    : Membership := Inside;
 731          Going   : Direction := Forward) return Natural
 732       renames Super_Index;
 733 
 734       function Index_Non_Blank
 735         (Source : Bounded_Wide_String;
 736          Going  : Direction := Forward) return Natural
 737          renames Super_Index_Non_Blank;
 738 
 739       function Index_Non_Blank
 740         (Source : Bounded_Wide_String;
 741          From   : Positive;
 742          Going  : Direction := Forward) return Natural
 743          renames Super_Index_Non_Blank;
 744 
 745       function Count
 746         (Source  : Bounded_Wide_String;
 747          Pattern : Wide_String;
 748          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
 749          return Natural
 750          renames Super_Count;
 751 
 752       function Count
 753         (Source  : Bounded_Wide_String;
 754          Pattern : Wide_String;
 755          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
 756          renames Super_Count;
 757 
 758       function Count
 759         (Source : Bounded_Wide_String;
 760          Set    : Wide_Maps.Wide_Character_Set) return Natural
 761          renames Super_Count;
 762 
 763       procedure Find_Token
 764         (Source : Bounded_Wide_String;
 765          Set    : Wide_Maps.Wide_Character_Set;
 766          From   : Positive;
 767          Test   : Membership;
 768          First  : out Positive;
 769          Last   : out Natural)
 770          renames Super_Find_Token;
 771 
 772       procedure Find_Token
 773         (Source : Bounded_Wide_String;
 774          Set    : Wide_Maps.Wide_Character_Set;
 775          Test   : Membership;
 776          First  : out Positive;
 777          Last   : out Natural)
 778          renames Super_Find_Token;
 779 
 780       function Translate
 781         (Source  : Bounded_Wide_String;
 782          Mapping : Wide_Maps.Wide_Character_Mapping)
 783          return Bounded_Wide_String
 784          renames Super_Translate;
 785 
 786       procedure Translate
 787         (Source   : in out Bounded_Wide_String;
 788          Mapping  : Wide_Maps.Wide_Character_Mapping)
 789          renames Super_Translate;
 790 
 791       function Translate
 792         (Source  : Bounded_Wide_String;
 793          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
 794          return Bounded_Wide_String
 795          renames Super_Translate;
 796 
 797       procedure Translate
 798         (Source  : in out Bounded_Wide_String;
 799          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
 800          renames Super_Translate;
 801 
 802       function Replace_Slice
 803         (Source : Bounded_Wide_String;
 804          Low    : Positive;
 805          High   : Natural;
 806          By     : Wide_String;
 807          Drop   : Truncation := Error) return Bounded_Wide_String
 808          renames Super_Replace_Slice;
 809 
 810       procedure Replace_Slice
 811         (Source   : in out Bounded_Wide_String;
 812          Low      : Positive;
 813          High     : Natural;
 814          By       : Wide_String;
 815          Drop     : Truncation := Error)
 816          renames Super_Replace_Slice;
 817 
 818       function Insert
 819         (Source   : Bounded_Wide_String;
 820          Before   : Positive;
 821          New_Item : Wide_String;
 822          Drop     : Truncation := Error) return Bounded_Wide_String
 823          renames Super_Insert;
 824 
 825       procedure Insert
 826         (Source   : in out Bounded_Wide_String;
 827          Before   : Positive;
 828          New_Item : Wide_String;
 829          Drop     : Truncation := Error)
 830          renames Super_Insert;
 831 
 832       function Overwrite
 833         (Source   : Bounded_Wide_String;
 834          Position : Positive;
 835          New_Item : Wide_String;
 836          Drop     : Truncation := Error) return Bounded_Wide_String
 837          renames Super_Overwrite;
 838 
 839       procedure Overwrite
 840         (Source    : in out Bounded_Wide_String;
 841          Position  : Positive;
 842          New_Item  : Wide_String;
 843          Drop      : Truncation := Error)
 844          renames Super_Overwrite;
 845 
 846       function Delete
 847         (Source  : Bounded_Wide_String;
 848          From    : Positive;
 849          Through : Natural) return Bounded_Wide_String
 850          renames Super_Delete;
 851 
 852       procedure Delete
 853         (Source  : in out Bounded_Wide_String;
 854          From    : Positive;
 855          Through : Natural)
 856          renames Super_Delete;
 857 
 858       function Trim
 859         (Source : Bounded_Wide_String;
 860          Side   : Trim_End) return Bounded_Wide_String
 861          renames Super_Trim;
 862 
 863       procedure Trim
 864         (Source : in out Bounded_Wide_String;
 865          Side   : Trim_End)
 866          renames Super_Trim;
 867 
 868       function Trim
 869         (Source : Bounded_Wide_String;
 870          Left   : Wide_Maps.Wide_Character_Set;
 871          Right  : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String
 872          renames Super_Trim;
 873 
 874       procedure Trim
 875         (Source : in out Bounded_Wide_String;
 876          Left   : Wide_Maps.Wide_Character_Set;
 877          Right  : Wide_Maps.Wide_Character_Set)
 878          renames Super_Trim;
 879 
 880       function Head
 881         (Source : Bounded_Wide_String;
 882          Count  : Natural;
 883          Pad    : Wide_Character := Wide_Space;
 884          Drop   : Truncation     := Error) return Bounded_Wide_String
 885          renames Super_Head;
 886 
 887       procedure Head
 888         (Source : in out Bounded_Wide_String;
 889          Count  : Natural;
 890          Pad    : Wide_Character := Wide_Space;
 891          Drop   : Truncation     := Error)
 892          renames Super_Head;
 893 
 894       function Tail
 895         (Source : Bounded_Wide_String;
 896          Count  : Natural;
 897          Pad    : Wide_Character := Wide_Space;
 898          Drop   : Truncation     := Error) return Bounded_Wide_String
 899          renames Super_Tail;
 900 
 901       procedure Tail
 902         (Source : in out Bounded_Wide_String;
 903          Count  : Natural;
 904          Pad    : Wide_Character := Wide_Space;
 905          Drop   : Truncation := Error)
 906          renames Super_Tail;
 907 
 908       function "*"
 909         (Left  : Natural;
 910          Right : Bounded_Wide_String) return Bounded_Wide_String
 911          renames Times;
 912 
 913       function Replicate
 914         (Count : Natural;
 915          Item  : Bounded_Wide_String;
 916          Drop  : Truncation := Error) return Bounded_Wide_String
 917          renames Super_Replicate;
 918 
 919    end Generic_Bounded_Length;
 920 
 921 end Ada.Strings.Wide_Bounded;