|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T V
Length: 8660 (0x21d4)
Types: TextFile
Names: »V«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
-- DISCUSSION:
--
-- This package implements the type "variable-length string" (vstring)
-- using generics. The alternative approaches are to use a discriminant
-- record in which the discriminant controls the length of a STRING inside
-- the record, or a record containing an access type which points to a
-- string, which can be deallocated and reallocated when necessary.
--
-- Advantages of this package:
-- * The other approaches force the vstring to be a limited private
-- type. Thus, their vstrings cannot appear on the left side of
-- the assignment operator; ie., their vstrings cannot be given
-- initial values or values by direct assignment. This package
-- uses a private type; therefore, these things can be done.
--
-- * The other approach stores the vstring in a string whose length
-- is determined dynamically. This package uses a fixed length
-- string. This difference might be reflected in faster and more
-- consistent execution times (this has NOT been verified).
--
-- Disadvantages of this package:
-- * Different instantiations must be used to declare vstrings with
-- different maximum lengths (this may be desirable, since
-- CONSTRAINT_ERROR will be raised if the maximum is exceeded).
--
-- * A second declaration is required to give the type declared by
-- the instantiation a name other than "VSTRING."
--
-- * The storage required for a vstring is determined by the generic
-- parameter LAST and not the actual length of its contents. Thus,
-- each object is allocated the maximum amount of storage, regardless
-- of its actual size.
--
-- MISCELLANEOUS:
-- Constraint checking is done explicitly in the code; thus, it cannot
-- be suppressed. On the other hand, constraint checking is not lost
-- if pragma suppress is supplied to the compilation (-S option)
-- (The robustness of the explicit constraint checking has NOT been
-- determined).
--
-- Compiling with the optimizer (-O option) may significantly reduce
-- the size (and possibly execution time) of the resulting executable.
--
-- Compiling an instantiation of VSTRINGS is roughly equivelent to
-- recompiling VSTRINGS. Since this takes a significant amount of time,
-- and the instantiation does not depend on any other library units,
-- it is STRONGLY recommended that the instantiation be compiled
-- separately, and thus done only ONCE.
--
-- USAGE: with VSTRINGS;
-- package package_name is new VSTRINGS(maximum_length);
-- .......................................................................... --
pragma Page;
with Text_Io;
use Text_Io;
generic
Last : Natural;
package Vstrings is
subtype Strindex is Natural;
First : constant Strindex := Strindex'First + 1;
type Vstring is private;
Nul : constant Vstring;
-- Attributes of a VSTRING
function Len (From : Vstring) return Strindex;
function Max (From : Vstring) return Strindex;
function Str (From : Vstring) return String;
function Char (From : Vstring; Position : Strindex := First)
return Character;
-- Comparisons
function "<" (Left : Vstring; Right : Vstring) return Boolean;
function ">" (Left : Vstring; Right : Vstring) return Boolean;
function "<=" (Left : Vstring; Right : Vstring) return Boolean;
function ">=" (Left : Vstring; Right : Vstring) return Boolean;
-- "=" and "/=" are predefined
-- Input/Output
procedure Put (File : in File_Type; Item : in Vstring);
procedure Put (Item : in Vstring);
procedure Put_Line (File : in File_Type; Item : in Vstring);
procedure Put_Line (Item : in Vstring);
procedure Get (File : in File_Type;
Item : out Vstring;
Length : in Strindex := Last);
procedure Get (Item : out Vstring; Length : in Strindex := Last);
procedure Get_Line (File : in File_Type; Item : in out Vstring);
procedure Get_Line (Item : in out Vstring);
-- Extraction
function Slice (From : Vstring; Front, Back : Strindex) return Vstring;
function Substr (From : Vstring; Start, Length : Strindex) return Vstring;
function Delete (From : Vstring; Front, Back : Strindex) return Vstring;
-- Editing
function Insert
(Target : Vstring; Item : Vstring; Position : Strindex := First)
return Vstring;
function Insert
(Target : Vstring; Item : String; Position : Strindex := First)
return Vstring;
function Insert (Target : Vstring;
Item : Character;
Position : Strindex := First) return Vstring;
function Append (Target : Vstring; Item : Vstring; Position : Strindex)
return Vstring;
function Append (Target : Vstring; Item : String; Position : Strindex)
return Vstring;
function Append (Target : Vstring; Item : Character; Position : Strindex)
return Vstring;
function Append (Target : Vstring; Item : Vstring) return Vstring;
function Append (Target : Vstring; Item : String) return Vstring;
function Append (Target : Vstring; Item : Character) return Vstring;
function Replace
(Target : Vstring; Item : Vstring; Position : Strindex := First)
return Vstring;
function Replace
(Target : Vstring; Item : String; Position : Strindex := First)
return Vstring;
function Replace (Target : Vstring;
Item : Character;
Position : Strindex := First) return Vstring;
-- Concatenation
function "&" (Left : Vstring; Right : Vstring) return Vstring;
function "&" (Left : Vstring; Right : String) return Vstring;
function "&" (Left : Vstring; Right : Character) return Vstring;
function "&" (Left : String; Right : Vstring) return Vstring;
function "&" (Left : Character; Right : Vstring) return Vstring;
-- Determine the position of a substring
function Index (Whole : Vstring; Part : Vstring; Occurrence : Natural := 1)
return Strindex;
function Index (Whole : Vstring; Part : String; Occurrence : Natural := 1)
return Strindex;
function Index (Whole : Vstring;
Part : Character;
Occurrence : Natural := 1) return Strindex;
function Rindex (Whole : Vstring; Part : Vstring; Occurrence : Natural := 1)
return Strindex;
function Rindex (Whole : Vstring; Part : String; Occurrence : Natural := 1)
return Strindex;
function Rindex (Whole : Vstring;
Part : Character;
Occurrence : Natural := 1) return Strindex;
-- Conversion from other associated types
function Vstr (From : String) return Vstring;
function Vstr (From : Character) return Vstring;
function "+" (From : String) return Vstring;
function "+" (From : Character) return Vstring;
generic
type From is private;
type To is private;
with function Str (X : From) return String is <>;
with function Vstr (Y : String) return To is <>;
function Convert (X : From) return To;
pragma Page;
private
type Vstring is
record
Len : Strindex := Strindex'First;
Value : String (First .. Last) := (others => Ascii.Nul);
end record;
Nul : constant Vstring := (Strindex'First, (others => Ascii.Nul));
end Vstrings;
--
-- .......................................................................... --
--
-- DISTRIBUTION AND COPYRIGHT:
--
-- This software is released to the Public Domain (note:
-- software released to the Public Domain is not subject
-- to copyright protection).
-- Restrictions on use or distribution: NONE
--
-- DISCLAIMER:
--
-- This software and its documentation are provided "AS IS" and
-- without any expressed or implied warranties whatsoever.
-- No warranties as to performance, merchantability, or fitness
-- for a particular purpose exist.
--
-- Because of the diversity of conditions and hardware under
-- which this software may be used, no warranty of fitness for
-- a particular purpose is offered. The user is advised to
-- test the software thoroughly before relying on it. The user
-- must assume the entire risk and liability of using this
-- software.
--
-- In no event shall any person or organization of people be
-- held responsible for any direct, indirect, consequential
-- or inconsequential damages or lost profits.