Static Semantics
- (1)
- The following procedures are defined in the generic packages Integer_IO
and Modular_IO, which have to be instantiated for the appropriate signed
integer or modular type respectively (indicated by Num in the
specifications).
- (2)
- Values are output as decimal or based literals, without low line
characters or exponent, and, for Integer_IO, preceded by a minus sign if
negative. The format (which includes any leading spaces and minus sign) can
be specified by an optional field width parameter. Values of widths of
fields in output formats are of the nonnegative integer subtype Field.
Values of bases are of the integer subtype Number_Base.
(3)
subtype Number_Base is Integer range 2 .. 16;
- (4)
- The default field width and base to be used by output procedures are
defined by the following variables that are declared in the generic packages
Integer_IO and Modular_IO:
(5)
Default_Width : Field := Num'Width;
Default_Base : Number_Base := 10;
- (6)
- The following procedures are provided:
(7)
procedure Get(File : in File_Type; Item : out Num; Width : in Field := 0);
procedure Get(Item : out Num; Width : in Field := 0);
- (8)
If the value of the parameter Width is zero, skips any leading
blanks, line terminators, or page terminators, then reads a plus sign
if present or (for a signed type only) a minus sign if present, then
reads the longest possible sequence of characters matching the syntax
of a numeric literal without a point. If a nonzero value of Width is
supplied, then exactly Width characters are input, or the characters
(possibly none) up to a line terminator, whichever comes first; any
skipped leading blanks are included in the count.
- (9)
Returns, in the parameter Item, the value of type Num that
corresponds to the sequence input.
- (10)
The exception Data_Error is propagated if the sequence of
characters read does not form a legal integer literal or if the value
obtained is not of the subtype Num (for Integer_IO) or is not in the
base range of Num (for Modular_IO).
(11)
procedure Put(File : in File_Type;
Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
procedure Put(Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
- (12)
Outputs the value of the parameter Item as an integer literal,
with no low lines, no exponent, and no leading zeros (but a single
zero for the value zero), and a preceding minus sign for a negative
value.
- (13)
If the resulting sequence of characters to be output has fewer
than Width characters, then leading spaces are first output to make
up the difference.
- (14)
Uses the syntax for decimal literal if the parameter Base has
the value ten (either explicitly or through Default_Base); otherwise,
uses the syntax for based literal, with any letters in upper case.
(15)
procedure Get(From : in String; Item : out Num; Last : out Positive);
- (16)
Reads an integer value from the beginning of the given string,
following the same rules as the Get procedure that reads an integer
value from a file, but treating the end of the string as a file
terminator. Returns, in the parameter Item, the value of type Num
that corresponds to the sequence input. Returns in Last the index
value such that From(Last) is the last character read.
- (17)
The exception Data_Error is propagated if the sequence input
does not have the required syntax or if the value obtained is not of
the subtype Num.
(18)
procedure Put(To : out String;
Item : in Num;
Base : in Number_Base := Default_Base);
- (19)
Outputs the value of the parameter Item to the given string,
following the same rule as for output to a file, using the length of
the given string as the value for Width.
- (20)
- Integer_Text_IO is a library package that is a nongeneric equivalent to
Text_IO.Integer_IO for the predefined type Integer:
(21)
with Ada.Text_IO;
package Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer);
- (22)
- For each predefined signed integer type, a nongeneric equivalent to
Text_IO.Integer_IO is provided, with names such as Ada.Long_Integer_Text_IO.
Implementation Permissions
- (23)
- The nongeneric equivalent packages may, but need not, be actual
instantiations of the generic package for the appropriate predefined type.
-
- (24)
(29) For Modular_IO, execution of Get propagates Data_Error if the
sequence of characters read forms an integer literal outside the range
0..Num'Last.
Examples
(25)
-- (blank)
(26)
package Int_IO is new Integer_IO(Small_Int); use Int_IO;
-- default format used at instantiation,
-- Default_Width = 4, Default_Base = 10
(27)
Put(126); -- "b126"
Put(-126, 7); -- "bbb-126"
Put(126, Width => 13, Base => 2); -- "bbb2#1111110#"
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12