home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / a-stwibo.ads < prev    next >
Text File  |  1996-09-28  |  14KB  |  466 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUNTIME 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. --                            $Revision: 1.6 $                              --
  10. --                                                                          --
  11. --           Copyright (c) 1992,1993,1994 NYU, All Rights Reserved          --
  12. --                                                                          --
  13. -- This specification is adapted from the Ada Reference Manual for use with --
  14. -- GNAT.  In accordance with the copyright of that document, you can freely --
  15. -- copy and modify this specification,  provided that if you redistribute a --
  16. -- modified version,  any changes that you have made are clearly indicated. --
  17. --                                                                          --
  18. ------------------------------------------------------------------------------
  19.  
  20.  
  21. with Ada.Strings.Wide_Maps;
  22.  
  23. package Ada.Strings.Wide_Bounded is
  24. pragma Preelaborate (Wide_Bounded);
  25.  
  26.    generic
  27.       Max : Positive;
  28.       --  Maximum length of a Bounded_Wide_String
  29.  
  30.    package Generic_Bounded_Length is
  31.  
  32.       Max_Length : constant Positive := Max;
  33.  
  34.       type Bounded_Wide_String is private;
  35.  
  36.       Null_Bounded_Wide_String : constant Bounded_Wide_String;
  37.  
  38.       subtype Length_Range is Natural range 0 .. Max_Length;
  39.  
  40.       function Length (Source : in Bounded_Wide_String) return Length_Range;
  41.  
  42.       --------------------------------------------------------
  43.       -- Conversion, Concatenation, and Selection Functions --
  44.       --------------------------------------------------------
  45.  
  46.       function To_Bounded_Wide_String
  47.         (Source : in Wide_String;
  48.          Drop   : in Truncation := Error)
  49.          return   Bounded_Wide_String;
  50.  
  51.       function To_Wide_String
  52.         (Source : in Bounded_Wide_String)
  53.          return   Wide_String;
  54.  
  55.       function Append
  56.         (Left, Right : in Bounded_Wide_String;
  57.          Drop        : in Truncation  := Error)
  58.          return        Bounded_Wide_String;
  59.  
  60.       function Append
  61.         (Left  : in Bounded_Wide_String;
  62.          Right : in Wide_String;
  63.          Drop  : in Truncation := Error)
  64.          return  Bounded_Wide_String;
  65.  
  66.       function Append
  67.         (Left  : in Wide_String;
  68.          Right : in Bounded_Wide_String;
  69.          Drop  : in Truncation := Error)
  70.          return  Bounded_Wide_String;
  71.  
  72.       function Append
  73.         (Left  : in Bounded_Wide_String;
  74.          Right : in Wide_Character;
  75.          Drop  : in Truncation := Error)
  76.          return  Bounded_Wide_String;
  77.  
  78.       function Append
  79.         (Left  : in Wide_Character;
  80.          Right : in Bounded_Wide_String;
  81.          Drop  : in Truncation := Error)
  82.          return  Bounded_Wide_String;
  83.  
  84.       procedure Append
  85.         (Source   : in out Bounded_Wide_String;
  86.          New_Item : in Bounded_Wide_String;
  87.          Drop     : in Truncation  := Error);
  88.  
  89.       procedure Append
  90.         (Source   : in out Bounded_Wide_String;
  91.          New_Item : in Wide_String;
  92.          Drop     : in Truncation  := Error);
  93.  
  94.       procedure Append
  95.         (Source   : in out Bounded_Wide_String;
  96.          New_Item : in Wide_Character;
  97.          Drop     : in Truncation  := Error);
  98.  
  99.       function "&"
  100.         (Left, Right : in Bounded_Wide_String)
  101.          return        Bounded_Wide_String;
  102.  
  103.       function "&"
  104.         (Left  : in Bounded_Wide_String;
  105.          Right : in Wide_String)
  106.          return  Bounded_Wide_String;
  107.  
  108.       function "&"
  109.         (Left  : in Wide_String;
  110.          Right : in Bounded_Wide_String)
  111.          return  Bounded_Wide_String;
  112.  
  113.       function "&"
  114.         (Left  : in Bounded_Wide_String;
  115.          Right : in Wide_Character)
  116.          return  Bounded_Wide_String;
  117.  
  118.       function "&"
  119.         (Left  : in Wide_Character;
  120.          Right : in Bounded_Wide_String)
  121.          return  Bounded_Wide_String;
  122.  
  123.       function Element
  124.         (Source : in Bounded_Wide_String;
  125.          Index  : in Positive)
  126.          return   Wide_Character;
  127.  
  128.       procedure Replace_Element
  129.         (Source : in out Bounded_Wide_String;
  130.          Index  : in Positive;
  131.          By     : in Wide_Character);
  132.  
  133.       function Slice
  134.         (Source : in Bounded_Wide_String;
  135.          Low    : in Positive;
  136.          High   : in Natural)
  137.          return   Wide_String;
  138.  
  139.       function "="
  140.         (Left  : in Bounded_Wide_String;
  141.          Right : in Bounded_Wide_String)
  142.          return  Boolean;
  143.  
  144.       function "="
  145.         (Left  : in Bounded_Wide_String;
  146.          Right : in Wide_String)
  147.          return  Boolean;
  148.  
  149.       function "="
  150.         (Left  : in Wide_String;
  151.          Right : in Bounded_Wide_String)
  152.          return  Boolean;
  153.  
  154.       function "<"
  155.         (Left  : in Bounded_Wide_String;
  156.          Right : in Bounded_Wide_String)
  157.          return  Boolean;
  158.  
  159.       function "<"
  160.         (Left  : in Bounded_Wide_String;
  161.          Right : in Wide_String)
  162.          return  Boolean;
  163.  
  164.       function "<"
  165.         (Left  : in Wide_String;
  166.          Right : in Bounded_Wide_String)
  167.          return  Boolean;
  168.  
  169.       function "<="
  170.         (Left  : in Bounded_Wide_String;
  171.          Right : in Bounded_Wide_String)
  172.          return  Boolean;
  173.  
  174.       function "<="
  175.         (Left  : in Bounded_Wide_String;
  176.          Right : in Wide_String)
  177.          return  Boolean;
  178.  
  179.       function "<="
  180.         (Left  : in Wide_String;
  181.          Right : in Bounded_Wide_String)
  182.          return  Boolean;
  183.  
  184.       function ">"
  185.         (Left  : in Bounded_Wide_String;
  186.          Right : in Bounded_Wide_String)
  187.          return  Boolean;
  188.  
  189.       function ">"
  190.         (Left  : in Bounded_Wide_String;
  191.          Right : in Wide_String)
  192.          return  Boolean;
  193.  
  194.       function ">"
  195.         (Left  : in Wide_String;
  196.          Right : in Bounded_Wide_String)
  197.          return  Boolean;
  198.  
  199.       function ">="
  200.         (Left  : in Bounded_Wide_String;
  201.          Right : in Bounded_Wide_String)
  202.          return  Boolean;
  203.  
  204.       function ">="
  205.         (Left  : in Bounded_Wide_String;
  206.          Right : in Wide_String)
  207.          return  Boolean;
  208.  
  209.       function ">="
  210.         (Left  : in Wide_String;
  211.          Right : in Bounded_Wide_String)
  212.          return  Boolean;
  213.  
  214.       ----------------------
  215.       -- Search Functions --
  216.       ----------------------
  217.  
  218.       function Index
  219.         (Source  : in Bounded_Wide_String;
  220.          Pattern : in Wide_String;
  221.          Going   : in Direction := Forward;
  222.          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
  223.          return    Natural;
  224.  
  225.       function Index
  226.         (Source  : in Bounded_Wide_String;
  227.          Pattern : in Wide_String;
  228.          Going   : in Direction := Forward;
  229.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  230.          return    Natural;
  231.  
  232.       function Index
  233.         (Source : in Bounded_Wide_String;
  234.          Set    : in Wide_Maps.Wide_Character_Set;
  235.          Test   : in Membership := Inside;
  236.          Going  : in Direction  := Forward)
  237.          return   Natural;
  238.  
  239.       function Index_Non_Blank
  240.         (Source : in Bounded_Wide_String;
  241.          Going  : in Direction := Forward)
  242.          return   Natural;
  243.  
  244.       function Count
  245.         (Source  : in Bounded_Wide_String;
  246.          Pattern : in Wide_String;
  247.          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
  248.          return    Natural;
  249.  
  250.       function Count
  251.         (Source  : in Bounded_Wide_String;
  252.          Pattern : in Wide_String;
  253.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  254.          return    Natural;
  255.  
  256.       function Count
  257.         (Source : in Bounded_Wide_String;
  258.          Set    : in Wide_Maps.Wide_Character_Set)
  259.          return   Natural;
  260.  
  261.       procedure Find_Token
  262.         (Source : in Bounded_Wide_String;
  263.          Set    : in Wide_Maps.Wide_Character_Set;
  264.          Test   : in Membership;
  265.          First  : out Positive;
  266.          Last   : out Natural);
  267.  
  268.       ------------------------------------
  269.       -- Wide_String Translation Subprograms --
  270.       ------------------------------------
  271.  
  272.       function Translate
  273.         (Source   : in Bounded_Wide_String;
  274.          Mapping  : in Wide_Maps.Wide_Character_Mapping)
  275.          return     Bounded_Wide_String;
  276.  
  277.       procedure Translate
  278.         (Source   : in out Bounded_Wide_String;
  279.          Mapping  : in Wide_Maps.Wide_Character_Mapping);
  280.  
  281.       function Translate
  282.         (Source  : in Bounded_Wide_String;
  283.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  284.          return    Bounded_Wide_String;
  285.  
  286.       procedure Translate
  287.         (Source  : in out Bounded_Wide_String;
  288.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
  289.  
  290.       ---------------------------------------
  291.       -- Wide_String Transformation Subprograms --
  292.       ---------------------------------------
  293.  
  294.       function Replace_Slice
  295.         (Source   : in Bounded_Wide_String;
  296.          Low      : in Positive;
  297.          High     : in Natural;
  298.          By       : in Wide_String;
  299.          Drop     : in Truncation := Error)
  300.          return     Bounded_Wide_String;
  301.  
  302.       procedure Replace_Slice
  303.         (Source   : in out Bounded_Wide_String;
  304.          Low      : in Positive;
  305.          High     : in Natural;
  306.          By       : in Wide_String;
  307.          Drop     : in Truncation := Error);
  308.  
  309.       function Insert
  310.         (Source   : in Bounded_Wide_String;
  311.          Before   : in Positive;
  312.          New_Item : in Wide_String;
  313.          Drop     : in Truncation := Error)
  314.          return     Bounded_Wide_String;
  315.  
  316.       procedure Insert
  317.         (Source   : in out Bounded_Wide_String;
  318.          Before   : in Positive;
  319.          New_Item : in Wide_String;
  320.          Drop     : in Truncation := Error);
  321.  
  322.       function Overwrite
  323.         (Source    : in Bounded_Wide_String;
  324.          Position  : in Positive;
  325.          New_Item  : in Wide_String;
  326.          Drop      : in Truncation := Error)
  327.          return      Bounded_Wide_String;
  328.  
  329.       procedure Overwrite
  330.         (Source    : in out Bounded_Wide_String;
  331.          Position  : in Positive;
  332.          New_Item  : in Wide_String;
  333.          Drop      : in Truncation := Error);
  334.  
  335.       function Delete
  336.         (Source  : in Bounded_Wide_String;
  337.          From    : in Positive;
  338.          Through : in Natural)
  339.          return    Bounded_Wide_String;
  340.  
  341.       procedure Delete
  342.         (Source  : in out Bounded_Wide_String;
  343.          From    : in Positive;
  344.          Through : in Natural);
  345.  
  346.       ---------------------------------
  347.       -- Wide_String Selector Subprograms --
  348.       ---------------------------------
  349.  
  350.       function Trim
  351.         (Source : in Bounded_Wide_String;
  352.          Side   : in Trim_End)
  353.          return   Bounded_Wide_String;
  354.  
  355.       procedure Trim
  356.         (Source : in out Bounded_Wide_String;
  357.          Side   : in Trim_End);
  358.  
  359.       function Trim
  360.         (Source  : in Bounded_Wide_String;
  361.           Left   : in Wide_Maps.Wide_Character_Set;
  362.           Right  : in Wide_Maps.Wide_Character_Set)
  363.           return   Bounded_Wide_String;
  364.  
  365.       procedure Trim
  366.         (Source : in out Bounded_Wide_String;
  367.          Left   : in Wide_Maps.Wide_Character_Set;
  368.          Right  : in Wide_Maps.Wide_Character_Set);
  369.  
  370.       function Head
  371.         (Source : in Bounded_Wide_String;
  372.          Count  : in Natural;
  373.          Pad    : in Wide_Character := Wide_Space;
  374.          Drop   : in Truncation := Error)
  375.          return   Bounded_Wide_String;
  376.  
  377.       procedure Head
  378.         (Source : in out Bounded_Wide_String;
  379.          Count  : in Natural;
  380.          Pad    : in Wide_Character  := Wide_Space;
  381.          Drop   : in Truncation := Error);
  382.  
  383.       function Tail
  384.         (Source : in Bounded_Wide_String;
  385.          Count  : in Natural;
  386.          Pad    : in Wide_Character  := Wide_Space;
  387.          Drop   : in Truncation := Error)
  388.          return Bounded_Wide_String;
  389.  
  390.       procedure Tail
  391.         (Source : in out Bounded_Wide_String;
  392.          Count  : in Natural;
  393.          Pad    : in Wide_Character  := Wide_Space;
  394.          Drop   : in Truncation := Error);
  395.  
  396.       ------------------------------------
  397.       -- Wide_String Constructor Subprograms --
  398.       ------------------------------------
  399.  
  400.       function "*"
  401.         (Left  : in Natural;
  402.          Right : in Wide_Character)
  403.          return  Bounded_Wide_String;
  404.  
  405.       function "*"
  406.         (Left  : in Natural;
  407.          Right : in Wide_String)
  408.          return  Bounded_Wide_String;
  409.  
  410.       function "*"
  411.         (Left  : in Natural;
  412.          Right : in Bounded_Wide_String)
  413.          return  Bounded_Wide_String;
  414.  
  415.       function Replicate
  416.         (Count : in Natural;
  417.          Item  : in Wide_Character;
  418.          Drop  : in Truncation := Error)
  419.          return  Bounded_Wide_String;
  420.  
  421.       function Replicate
  422.         (Count : in Natural;
  423.          Item  : in Wide_String;
  424.          Drop  : in Truncation := Error)
  425.          return  Bounded_Wide_String;
  426.  
  427.       function Replicate
  428.         (Count : in Natural;
  429.          Item  : in Bounded_Wide_String;
  430.          Drop  : in Truncation := Error)
  431.          return  Bounded_Wide_String;
  432.  
  433.    private
  434.       Wide_NUL : constant Wide_Character := Wide_Character'Val (0);
  435.  
  436.       type Bounded_Wide_String is record
  437.          Length : Length_Range;
  438.          Data   : Wide_String (1 .. Max_Length);
  439.       end record;
  440.  
  441.       Null_Bounded_Wide_String : constant Bounded_Wide_String :=
  442.                (Length => 0, Data => (1 .. Max_Length => Wide_NUL));
  443.  
  444.       --  Pragma Inline declarations (GNAT specific additions)
  445.  
  446.       pragma Inline ("=");
  447.       pragma Inline ("<");
  448.       pragma Inline ("<=");
  449.       pragma Inline (">");
  450.       pragma Inline (">=");
  451.       pragma Inline ("&");
  452.       pragma Inline (Count);
  453.       pragma Inline (Element);
  454.       pragma Inline (Find_Token);
  455.       pragma Inline (Index);
  456.       pragma Inline (Index_Non_Blank);
  457.       pragma Inline (Length);
  458.       pragma Inline (Replace_Element);
  459.       pragma Inline (Slice);
  460.       pragma Inline (To_Bounded_Wide_String);
  461.       pragma Inline (To_Wide_String);
  462.  
  463.    end Generic_Bounded_Length;
  464.  
  465. end Ada.Strings.Wide_Bounded;
  466.