File : a-stzbou.ads


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