A.10.8 Input-Output for Integer Types
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
30 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/1
This paragraph
was deleted.
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#"