File : a-stzsup.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 _ 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.Wide_Wide_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 the package
  37 --  Strings.Wide_Wide_Bounded.Generic_Bounded_Length use this type with
  38 --  an appropriate discriminant value set.
  39 
  40 with Ada.Strings.Wide_Wide_Maps;
  41 
  42 package Ada.Strings.Wide_Wide_Superbounded is
  43    pragma Preelaborate;
  44 
  45    Wide_Wide_NUL : constant Wide_Wide_Character :=
  46                      Wide_Wide_Character'Val (0);
  47 
  48    --  Wide_Wide_Bounded.Generic_Bounded_Length.Wide_Wide_Bounded_String is
  49    --  derived from Super_String, with the constraint of the maximum length.
  50 
  51    type Super_String (Max_Length : Positive) is record
  52       Current_Length : Natural := 0;
  53       Data           : Wide_Wide_String (1 .. Max_Length);
  54       --  A previous version had a default initial value for Data, which is
  55       --  no longer necessary, because we now special-case this type in the
  56       --  compiler, so "=" composes properly for descendants of this type.
  57       --  Leaving it out is more efficient.
  58    end record;
  59 
  60    --  The subprograms defined for Super_String are similar to those defined
  61    --  for Bounded_Wide_Wide_String, except that they have different names, so
  62    --  that they can be renamed in Wide_Wide_Bounded.Generic_Bounded_Length.
  63 
  64    function Super_Length (Source : Super_String) return Natural;
  65 
  66    --------------------------------------------------------
  67    -- Conversion, Concatenation, and Selection Functions --
  68    --------------------------------------------------------
  69 
  70    function To_Super_String
  71      (Source     : Wide_Wide_String;
  72       Max_Length : Natural;
  73       Drop       : Truncation := Error) return Super_String;
  74    --  Note the additional parameter Max_Length, which specifies the maximum
  75    --  length setting of the resulting Super_String value.
  76 
  77    --  The following procedures have declarations (and semantics) that are
  78    --  exactly analogous to those declared in Ada.Strings.Wide_Wide_Bounded.
  79 
  80    function Super_To_String (Source : Super_String) return Wide_Wide_String;
  81 
  82    procedure Set_Super_String
  83      (Target : out Super_String;
  84       Source : Wide_Wide_String;
  85       Drop   : Truncation := Error);
  86 
  87    function Super_Append
  88      (Left  : Super_String;
  89       Right : Super_String;
  90       Drop  : Truncation := Error) return Super_String;
  91 
  92    function Super_Append
  93      (Left  : Super_String;
  94       Right : Wide_Wide_String;
  95       Drop  : Truncation := Error) return Super_String;
  96 
  97    function Super_Append
  98      (Left  : Wide_Wide_String;
  99       Right : Super_String;
 100       Drop  : Truncation := Error) return Super_String;
 101 
 102    function Super_Append
 103      (Left  : Super_String;
 104       Right : Wide_Wide_Character;
 105       Drop  : Truncation := Error) return Super_String;
 106 
 107    function Super_Append
 108      (Left  : Wide_Wide_Character;
 109       Right : Super_String;
 110       Drop  : Truncation := Error) return Super_String;
 111 
 112    procedure Super_Append
 113      (Source   : in out Super_String;
 114       New_Item : Super_String;
 115       Drop     : Truncation := Error);
 116 
 117    procedure Super_Append
 118      (Source   : in out Super_String;
 119       New_Item : Wide_Wide_String;
 120       Drop     : Truncation := Error);
 121 
 122    procedure Super_Append
 123      (Source   : in out Super_String;
 124       New_Item : Wide_Wide_Character;
 125       Drop     : Truncation := Error);
 126 
 127    function Concat
 128      (Left  : Super_String;
 129       Right : Super_String) return Super_String;
 130 
 131    function Concat
 132      (Left  : Super_String;
 133       Right : Wide_Wide_String) return Super_String;
 134 
 135    function Concat
 136      (Left  : Wide_Wide_String;
 137       Right : Super_String) return Super_String;
 138 
 139    function Concat
 140      (Left  : Super_String;
 141       Right : Wide_Wide_Character) return Super_String;
 142 
 143    function Concat
 144      (Left  : Wide_Wide_Character;
 145       Right : Super_String) return Super_String;
 146 
 147    function Super_Element
 148      (Source : Super_String;
 149       Index  : Positive) return Wide_Wide_Character;
 150 
 151    procedure Super_Replace_Element
 152      (Source : in out Super_String;
 153       Index  : Positive;
 154       By     : Wide_Wide_Character);
 155 
 156    function Super_Slice
 157      (Source : Super_String;
 158       Low    : Positive;
 159       High   : Natural) return Wide_Wide_String;
 160 
 161    function Super_Slice
 162      (Source : Super_String;
 163       Low    : Positive;
 164       High   : Natural) return Super_String;
 165 
 166    procedure Super_Slice
 167      (Source : Super_String;
 168       Target : out Super_String;
 169       Low    : Positive;
 170       High   : Natural);
 171 
 172    function "="
 173      (Left  : Super_String;
 174       Right : Super_String) return Boolean;
 175 
 176    function Equal
 177      (Left  : Super_String;
 178       Right : Super_String) return Boolean renames "=";
 179 
 180    function Equal
 181      (Left  : Super_String;
 182       Right : Wide_Wide_String) return Boolean;
 183 
 184    function Equal
 185      (Left  : Wide_Wide_String;
 186       Right : Super_String) return Boolean;
 187 
 188    function Less
 189      (Left  : Super_String;
 190       Right : Super_String) return Boolean;
 191 
 192    function Less
 193      (Left  : Super_String;
 194       Right : Wide_Wide_String) return Boolean;
 195 
 196    function Less
 197      (Left  : Wide_Wide_String;
 198       Right : Super_String) return Boolean;
 199 
 200    function Less_Or_Equal
 201      (Left  : Super_String;
 202       Right : Super_String) return Boolean;
 203 
 204    function Less_Or_Equal
 205      (Left  : Super_String;
 206       Right : Wide_Wide_String) return Boolean;
 207 
 208    function Less_Or_Equal
 209      (Left  : Wide_Wide_String;
 210       Right : Super_String) return Boolean;
 211 
 212    function Greater
 213      (Left  : Super_String;
 214       Right : Super_String) return Boolean;
 215 
 216    function Greater
 217      (Left  : Super_String;
 218       Right : Wide_Wide_String) return Boolean;
 219 
 220    function Greater
 221      (Left  : Wide_Wide_String;
 222       Right : Super_String) return Boolean;
 223 
 224    function Greater_Or_Equal
 225      (Left  : Super_String;
 226       Right : Super_String) return Boolean;
 227 
 228    function Greater_Or_Equal
 229      (Left  : Super_String;
 230       Right : Wide_Wide_String) return Boolean;
 231 
 232    function Greater_Or_Equal
 233      (Left  : Wide_Wide_String;
 234       Right : Super_String) return Boolean;
 235 
 236    ----------------------
 237    -- Search Functions --
 238    ----------------------
 239 
 240    function Super_Index
 241      (Source  : Super_String;
 242       Pattern : Wide_Wide_String;
 243       Going   : Direction := Forward;
 244       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
 245                   Wide_Wide_Maps.Identity)
 246       return Natural;
 247 
 248    function Super_Index
 249      (Source  : Super_String;
 250       Pattern : Wide_Wide_String;
 251       Going   : Direction := Forward;
 252       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
 253       return Natural;
 254 
 255    function Super_Index
 256      (Source : Super_String;
 257       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
 258       Test   : Membership := Inside;
 259       Going  : Direction  := Forward) return Natural;
 260 
 261    function Super_Index
 262      (Source  : Super_String;
 263       Pattern : Wide_Wide_String;
 264       From    : Positive;
 265       Going   : Direction := Forward;
 266       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
 267                   Wide_Wide_Maps.Identity)
 268       return Natural;
 269 
 270    function Super_Index
 271      (Source  : Super_String;
 272       Pattern : Wide_Wide_String;
 273       From    : Positive;
 274       Going   : Direction := Forward;
 275       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
 276       return Natural;
 277 
 278    function Super_Index
 279      (Source : Super_String;
 280       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
 281       From   : Positive;
 282       Test   : Membership := Inside;
 283       Going  : Direction := Forward) return Natural;
 284 
 285    function Super_Index_Non_Blank
 286      (Source : Super_String;
 287       Going  : Direction := Forward) return Natural;
 288 
 289    function Super_Index_Non_Blank
 290      (Source : Super_String;
 291       From   : Positive;
 292       Going  : Direction := Forward) return Natural;
 293 
 294    function Super_Count
 295      (Source  : Super_String;
 296       Pattern : Wide_Wide_String;
 297       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
 298                   Wide_Wide_Maps.Identity)
 299       return Natural;
 300 
 301    function Super_Count
 302      (Source  : Super_String;
 303       Pattern : Wide_Wide_String;
 304       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
 305       return Natural;
 306 
 307    function Super_Count
 308      (Source : Super_String;
 309       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
 310 
 311    procedure Super_Find_Token
 312      (Source : Super_String;
 313       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
 314       From   : Positive;
 315       Test   : Membership;
 316       First  : out Positive;
 317       Last   : out Natural);
 318 
 319    procedure Super_Find_Token
 320      (Source : Super_String;
 321       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
 322       Test   : Membership;
 323       First  : out Positive;
 324       Last   : out Natural);
 325 
 326    ------------------------------------
 327    -- String Translation Subprograms --
 328    ------------------------------------
 329 
 330    function Super_Translate
 331      (Source  : Super_String;
 332       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
 333       return Super_String;
 334 
 335    procedure Super_Translate
 336      (Source   : in out Super_String;
 337       Mapping  : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
 338 
 339    function Super_Translate
 340      (Source  : Super_String;
 341       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
 342       return Super_String;
 343 
 344    procedure Super_Translate
 345      (Source  : in out Super_String;
 346       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
 347 
 348    ---------------------------------------
 349    -- String Transformation Subprograms --
 350    ---------------------------------------
 351 
 352    function Super_Replace_Slice
 353      (Source : Super_String;
 354       Low    : Positive;
 355       High   : Natural;
 356       By     : Wide_Wide_String;
 357       Drop   : Truncation := Error) return Super_String;
 358 
 359    procedure Super_Replace_Slice
 360      (Source  : in out Super_String;
 361       Low     : Positive;
 362       High    : Natural;
 363       By      : Wide_Wide_String;
 364       Drop    : Truncation := Error);
 365 
 366    function Super_Insert
 367      (Source   : Super_String;
 368       Before   : Positive;
 369       New_Item : Wide_Wide_String;
 370       Drop     : Truncation := Error) return Super_String;
 371 
 372    procedure Super_Insert
 373      (Source   : in out Super_String;
 374       Before   : Positive;
 375       New_Item : Wide_Wide_String;
 376       Drop     : Truncation := Error);
 377 
 378    function Super_Overwrite
 379      (Source   : Super_String;
 380       Position : Positive;
 381       New_Item : Wide_Wide_String;
 382       Drop     : Truncation := Error) return Super_String;
 383 
 384    procedure Super_Overwrite
 385      (Source    : in out Super_String;
 386       Position  : Positive;
 387       New_Item  : Wide_Wide_String;
 388       Drop      : Truncation := Error);
 389 
 390    function Super_Delete
 391      (Source  : Super_String;
 392       From    : Positive;
 393       Through : Natural) return Super_String;
 394 
 395    procedure Super_Delete
 396      (Source  : in out Super_String;
 397       From    : Positive;
 398       Through : Natural);
 399 
 400    ---------------------------------
 401    -- String Selector Subprograms --
 402    ---------------------------------
 403 
 404    function Super_Trim
 405      (Source : Super_String;
 406       Side   : Trim_End) return Super_String;
 407 
 408    procedure Super_Trim
 409      (Source : in out Super_String;
 410       Side   : Trim_End);
 411 
 412    function Super_Trim
 413      (Source : Super_String;
 414       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
 415       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set) return Super_String;
 416 
 417    procedure Super_Trim
 418      (Source : in out Super_String;
 419       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
 420       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set);
 421 
 422    function Super_Head
 423      (Source : Super_String;
 424       Count  : Natural;
 425       Pad    : Wide_Wide_Character := Wide_Wide_Space;
 426       Drop   : Truncation := Error) return Super_String;
 427 
 428    procedure Super_Head
 429      (Source : in out Super_String;
 430       Count  : Natural;
 431       Pad    : Wide_Wide_Character := Wide_Wide_Space;
 432       Drop   : Truncation := Error);
 433 
 434    function Super_Tail
 435      (Source : Super_String;
 436       Count  : Natural;
 437       Pad    : Wide_Wide_Character := Wide_Wide_Space;
 438       Drop   : Truncation := Error) return Super_String;
 439 
 440    procedure Super_Tail
 441      (Source : in out Super_String;
 442       Count  : Natural;
 443       Pad    : Wide_Wide_Character := Wide_Wide_Space;
 444       Drop   : Truncation := Error);
 445 
 446    ------------------------------------
 447    -- String Constructor Subprograms --
 448    ------------------------------------
 449 
 450    --  Note: in some of the following routines, there is an extra parameter
 451    --  Max_Length which specifies the value of the maximum length for the
 452    --  resulting Super_String value.
 453 
 454    function Times
 455      (Left       : Natural;
 456       Right      : Wide_Wide_Character;
 457       Max_Length : Positive) return Super_String;
 458    --  Note the additional parameter Max_Length
 459 
 460    function Times
 461      (Left       : Natural;
 462       Right      : Wide_Wide_String;
 463       Max_Length : Positive) return Super_String;
 464    --  Note the additional parameter Max_Length
 465 
 466    function Times
 467      (Left  : Natural;
 468       Right : Super_String) return Super_String;
 469 
 470    function Super_Replicate
 471      (Count      : Natural;
 472       Item       : Wide_Wide_Character;
 473       Drop       : Truncation := Error;
 474       Max_Length : Positive) return Super_String;
 475    --  Note the additional parameter Max_Length
 476 
 477    function Super_Replicate
 478      (Count      : Natural;
 479       Item       : Wide_Wide_String;
 480       Drop       : Truncation := Error;
 481       Max_Length : Positive) return Super_String;
 482    --  Note the additional parameter Max_Length
 483 
 484    function Super_Replicate
 485      (Count : Natural;
 486       Item  : Super_String;
 487       Drop  : Truncation := Error) return Super_String;
 488 
 489 private
 490       --  Pragma Inline declarations
 491 
 492       pragma Inline ("=");
 493       pragma Inline (Less);
 494       pragma Inline (Less_Or_Equal);
 495       pragma Inline (Greater);
 496       pragma Inline (Greater_Or_Equal);
 497       pragma Inline (Concat);
 498       pragma Inline (Super_Count);
 499       pragma Inline (Super_Element);
 500       pragma Inline (Super_Find_Token);
 501       pragma Inline (Super_Index);
 502       pragma Inline (Super_Index_Non_Blank);
 503       pragma Inline (Super_Length);
 504       pragma Inline (Super_Replace_Element);
 505       pragma Inline (Super_Slice);
 506       pragma Inline (Super_To_String);
 507 
 508 end Ada.Strings.Wide_Wide_Superbounded;