File : a-strsup.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --             A D A . S T R I N G S . S U P E R B O U N D E D              --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 2003-2013, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 --  This non generic package contains most of the implementation of the
  33 --  generic package Ada.Strings.Bounded.Generic_Bounded_Length.
  34 
  35 --  It defines type Super_String as a discriminated record with the maximum
  36 --  length as the discriminant. Individual instantiations of Strings.Bounded
  37 --  use this type with an appropriate discriminant value set.
  38 
  39 with Ada.Strings.Maps;
  40 
  41 package Ada.Strings.Superbounded is
  42    pragma Preelaborate;
  43 
  44    --  Type Bounded_String in Ada.Strings.Bounded.Generic_Bounded_Length is
  45    --  derived from Super_String, with the constraint of the maximum length.
  46 
  47    type Super_String (Max_Length : Positive) is record
  48       Current_Length : Natural := 0;
  49       Data           : String (1 .. Max_Length);
  50       --  A previous version had a default initial value for Data, which is
  51       --  no longer necessary, because we now special-case this type in the
  52       --  compiler, so "=" composes properly for descendants of this type.
  53       --  Leaving it out is more efficient.
  54    end record;
  55 
  56    --  The subprograms defined for Super_String are similar to those
  57    --  defined for Bounded_String, except that they have different names, so
  58    --  that they can be renamed in Ada.Strings.Bounded.Generic_Bounded_Length.
  59 
  60    function Super_Length (Source : Super_String) return Natural;
  61 
  62    --------------------------------------------------------
  63    -- Conversion, Concatenation, and Selection Functions --
  64    --------------------------------------------------------
  65 
  66    function To_Super_String
  67      (Source     : String;
  68       Max_Length : Natural;
  69       Drop       : Truncation := Error) return Super_String;
  70    --  Note the additional parameter Max_Length, which specifies the maximum
  71    --  length setting of the resulting Super_String value.
  72 
  73    --  The following procedures have declarations (and semantics) that are
  74    --  exactly analogous to those declared in Ada.Strings.Bounded.
  75 
  76    function Super_To_String (Source : Super_String) return String;
  77 
  78    procedure Set_Super_String
  79      (Target : out Super_String;
  80       Source : String;
  81       Drop   : Truncation := Error);
  82 
  83    function Super_Append
  84      (Left  : Super_String;
  85       Right : Super_String;
  86       Drop  : Truncation  := Error) return Super_String;
  87 
  88    function Super_Append
  89      (Left  : Super_String;
  90       Right : String;
  91       Drop  : Truncation := Error) return Super_String;
  92 
  93    function Super_Append
  94      (Left  : String;
  95       Right : Super_String;
  96       Drop  : Truncation := Error) return Super_String;
  97 
  98    function Super_Append
  99      (Left  : Super_String;
 100       Right : Character;
 101       Drop  : Truncation := Error) return Super_String;
 102 
 103    function Super_Append
 104      (Left  : Character;
 105       Right : Super_String;
 106       Drop  : Truncation := Error) return Super_String;
 107 
 108    procedure Super_Append
 109      (Source   : in out Super_String;
 110       New_Item : Super_String;
 111       Drop     : Truncation  := Error);
 112 
 113    procedure Super_Append
 114      (Source   : in out Super_String;
 115       New_Item : String;
 116       Drop     : Truncation  := Error);
 117 
 118    procedure Super_Append
 119      (Source   : in out Super_String;
 120       New_Item : Character;
 121       Drop     : Truncation  := Error);
 122 
 123    function Concat
 124      (Left  : Super_String;
 125       Right : Super_String) return Super_String;
 126 
 127    function Concat
 128      (Left  : Super_String;
 129       Right : String) return Super_String;
 130 
 131    function Concat
 132      (Left  : String;
 133       Right : Super_String) return Super_String;
 134 
 135    function Concat
 136      (Left  : Super_String;
 137       Right : Character) return Super_String;
 138 
 139    function Concat
 140      (Left  : Character;
 141       Right : Super_String) return Super_String;
 142 
 143    function Super_Element
 144      (Source : Super_String;
 145       Index  : Positive) return Character;
 146 
 147    procedure Super_Replace_Element
 148      (Source : in out Super_String;
 149       Index  : Positive;
 150       By     : Character);
 151 
 152    function Super_Slice
 153      (Source : Super_String;
 154       Low    : Positive;
 155       High   : Natural) return String;
 156 
 157    function Super_Slice
 158      (Source : Super_String;
 159       Low    : Positive;
 160       High   : Natural) return Super_String;
 161 
 162    procedure Super_Slice
 163      (Source : Super_String;
 164       Target : out Super_String;
 165       Low    : Positive;
 166       High   : Natural);
 167 
 168    function "="
 169      (Left  : Super_String;
 170       Right : Super_String) return Boolean;
 171 
 172    function Equal
 173      (Left  : Super_String;
 174       Right : Super_String) return Boolean renames "=";
 175 
 176    function Equal
 177      (Left  : Super_String;
 178       Right : String) return Boolean;
 179 
 180    function Equal
 181      (Left  : String;
 182       Right : Super_String) return Boolean;
 183 
 184    function Less
 185      (Left  : Super_String;
 186       Right : Super_String) return Boolean;
 187 
 188    function Less
 189      (Left  : Super_String;
 190       Right : String) return Boolean;
 191 
 192    function Less
 193      (Left  : String;
 194       Right : Super_String) return Boolean;
 195 
 196    function Less_Or_Equal
 197      (Left  : Super_String;
 198       Right : Super_String) return Boolean;
 199 
 200    function Less_Or_Equal
 201      (Left  : Super_String;
 202       Right : String) return Boolean;
 203 
 204    function Less_Or_Equal
 205      (Left  : String;
 206       Right : Super_String) return Boolean;
 207 
 208    function Greater
 209      (Left  : Super_String;
 210       Right : Super_String) return Boolean;
 211 
 212    function Greater
 213      (Left  : Super_String;
 214       Right : String) return Boolean;
 215 
 216    function Greater
 217      (Left  : String;
 218       Right : Super_String) return Boolean;
 219 
 220    function Greater_Or_Equal
 221      (Left  : Super_String;
 222       Right : Super_String) return Boolean;
 223 
 224    function Greater_Or_Equal
 225      (Left  : Super_String;
 226       Right : String) return Boolean;
 227 
 228    function Greater_Or_Equal
 229      (Left  : String;
 230       Right : Super_String) return Boolean;
 231 
 232    ----------------------
 233    -- Search Functions --
 234    ----------------------
 235 
 236    function Super_Index
 237      (Source  : Super_String;
 238       Pattern : String;
 239       Going   : Direction := Forward;
 240       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
 241 
 242    function Super_Index
 243      (Source  : Super_String;
 244       Pattern : String;
 245       Going   : Direction := Forward;
 246       Mapping : Maps.Character_Mapping_Function) return Natural;
 247 
 248    function Super_Index
 249      (Source : Super_String;
 250       Set    : Maps.Character_Set;
 251       Test   : Membership := Inside;
 252       Going  : Direction  := Forward) return Natural;
 253 
 254    function Super_Index
 255      (Source  : Super_String;
 256       Pattern : String;
 257       From    : Positive;
 258       Going   : Direction := Forward;
 259       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
 260 
 261    function Super_Index
 262      (Source  : Super_String;
 263       Pattern : String;
 264       From    : Positive;
 265       Going   : Direction := Forward;
 266       Mapping : Maps.Character_Mapping_Function) return Natural;
 267 
 268    function Super_Index
 269      (Source : Super_String;
 270       Set    : Maps.Character_Set;
 271       From   : Positive;
 272       Test   : Membership := Inside;
 273       Going  : Direction := Forward) return Natural;
 274 
 275    function Super_Index_Non_Blank
 276      (Source : Super_String;
 277       Going  : Direction := Forward) return Natural;
 278 
 279    function Super_Index_Non_Blank
 280      (Source : Super_String;
 281       From   : Positive;
 282       Going  : Direction := Forward) return Natural;
 283 
 284    function Super_Count
 285      (Source  : Super_String;
 286       Pattern : String;
 287       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
 288 
 289    function Super_Count
 290      (Source  : Super_String;
 291       Pattern : String;
 292       Mapping : Maps.Character_Mapping_Function) return Natural;
 293 
 294    function Super_Count
 295      (Source : Super_String;
 296       Set    : Maps.Character_Set) return Natural;
 297 
 298    procedure Super_Find_Token
 299      (Source : Super_String;
 300       Set    : Maps.Character_Set;
 301       From   : Positive;
 302       Test   : Membership;
 303       First  : out Positive;
 304       Last   : out Natural);
 305 
 306    procedure Super_Find_Token
 307      (Source : Super_String;
 308       Set    : Maps.Character_Set;
 309       Test   : Membership;
 310       First  : out Positive;
 311       Last   : out Natural);
 312 
 313    ------------------------------------
 314    -- String Translation Subprograms --
 315    ------------------------------------
 316 
 317    function Super_Translate
 318      (Source  : Super_String;
 319       Mapping : Maps.Character_Mapping) return Super_String;
 320 
 321    procedure Super_Translate
 322      (Source   : in out Super_String;
 323       Mapping  : Maps.Character_Mapping);
 324 
 325    function Super_Translate
 326      (Source  : Super_String;
 327       Mapping : Maps.Character_Mapping_Function) return Super_String;
 328 
 329    procedure Super_Translate
 330      (Source  : in out Super_String;
 331       Mapping : Maps.Character_Mapping_Function);
 332 
 333    ---------------------------------------
 334    -- String Transformation Subprograms --
 335    ---------------------------------------
 336 
 337    function Super_Replace_Slice
 338      (Source : Super_String;
 339       Low    : Positive;
 340       High   : Natural;
 341       By     : String;
 342       Drop   : Truncation := Error) return Super_String;
 343 
 344    procedure Super_Replace_Slice
 345      (Source  : in out Super_String;
 346       Low     : Positive;
 347       High    : Natural;
 348       By      : String;
 349       Drop    : Truncation := Error);
 350 
 351    function Super_Insert
 352      (Source   : Super_String;
 353       Before   : Positive;
 354       New_Item : String;
 355       Drop     : Truncation := Error) return Super_String;
 356 
 357    procedure Super_Insert
 358      (Source   : in out Super_String;
 359       Before   : Positive;
 360       New_Item : String;
 361       Drop     : Truncation := Error);
 362 
 363    function Super_Overwrite
 364      (Source   : Super_String;
 365       Position : Positive;
 366       New_Item : String;
 367       Drop     : Truncation := Error) return Super_String;
 368 
 369    procedure Super_Overwrite
 370      (Source    : in out Super_String;
 371       Position  : Positive;
 372       New_Item  : String;
 373       Drop      : Truncation := Error);
 374 
 375    function Super_Delete
 376      (Source  : Super_String;
 377       From    : Positive;
 378       Through : Natural) return Super_String;
 379 
 380    procedure Super_Delete
 381      (Source  : in out Super_String;
 382       From    : Positive;
 383       Through : Natural);
 384 
 385    ---------------------------------
 386    -- String Selector Subprograms --
 387    ---------------------------------
 388 
 389    function Super_Trim
 390      (Source : Super_String;
 391       Side   : Trim_End) return Super_String;
 392 
 393    procedure Super_Trim
 394      (Source : in out Super_String;
 395       Side   : Trim_End);
 396 
 397    function Super_Trim
 398      (Source : Super_String;
 399       Left   : Maps.Character_Set;
 400       Right  : Maps.Character_Set) return Super_String;
 401 
 402    procedure Super_Trim
 403      (Source : in out Super_String;
 404       Left   : Maps.Character_Set;
 405       Right  : Maps.Character_Set);
 406 
 407    function Super_Head
 408      (Source : Super_String;
 409       Count  : Natural;
 410       Pad    : Character := Space;
 411       Drop   : Truncation := Error) return Super_String;
 412 
 413    procedure Super_Head
 414      (Source : in out Super_String;
 415       Count  : Natural;
 416       Pad    : Character := Space;
 417       Drop   : Truncation := Error);
 418 
 419    function Super_Tail
 420      (Source : Super_String;
 421       Count  : Natural;
 422       Pad    : Character := Space;
 423       Drop   : Truncation := Error) return Super_String;
 424 
 425    procedure Super_Tail
 426      (Source : in out Super_String;
 427       Count  : Natural;
 428       Pad    : Character := Space;
 429       Drop   : Truncation := Error);
 430 
 431    ------------------------------------
 432    -- String Constructor Subprograms --
 433    ------------------------------------
 434 
 435    --  Note: in some of the following routines, there is an extra parameter
 436    --  Max_Length which specifies the value of the maximum length for the
 437    --  resulting Super_String value.
 438 
 439    function Times
 440      (Left       : Natural;
 441       Right      : Character;
 442       Max_Length : Positive) return Super_String;
 443    --  Note the additional parameter Max_Length
 444 
 445    function Times
 446      (Left       : Natural;
 447       Right      : String;
 448       Max_Length : Positive) return Super_String;
 449    --  Note the additional parameter Max_Length
 450 
 451    function Times
 452      (Left  : Natural;
 453       Right : Super_String) return Super_String;
 454 
 455    function Super_Replicate
 456      (Count      : Natural;
 457       Item       : Character;
 458       Drop       : Truncation := Error;
 459       Max_Length : Positive) return Super_String;
 460    --  Note the additional parameter Max_Length
 461 
 462    function Super_Replicate
 463      (Count      : Natural;
 464       Item       : String;
 465       Drop       : Truncation := Error;
 466       Max_Length : Positive) return Super_String;
 467    --  Note the additional parameter Max_Length
 468 
 469    function Super_Replicate
 470      (Count : Natural;
 471       Item  : Super_String;
 472       Drop  : Truncation := Error) return Super_String;
 473 
 474 private
 475       --  Pragma Inline declarations
 476 
 477       pragma Inline ("=");
 478       pragma Inline (Less);
 479       pragma Inline (Less_Or_Equal);
 480       pragma Inline (Greater);
 481       pragma Inline (Greater_Or_Equal);
 482       pragma Inline (Concat);
 483       pragma Inline (Super_Count);
 484       pragma Inline (Super_Element);
 485       pragma Inline (Super_Find_Token);
 486       pragma Inline (Super_Index);
 487       pragma Inline (Super_Index_Non_Blank);
 488       pragma Inline (Super_Length);
 489       pragma Inline (Super_Replace_Element);
 490       pragma Inline (Super_Slice);
 491       pragma Inline (Super_To_String);
 492 
 493 end Ada.Strings.Superbounded;