1
For each implementation there is a library package called System which includes the definitions of certain configuration−dependent characteristics.
2
The following language−defined library package exists:
3/2
package System is pragma Pure(System);
4
type Name is implementation−defined−enumeration−type; System_Name : constant Name := implementation−defined;
5
−− System−Dependent Named Numbers:
6
Min_Int : constant := root_integer'First; Max_Int : constant := root_integer'Last;
7
Max_Binary_Modulus : constant := implementation−defined; Max_Nonbinary_Modulus : constant := implementation−defined;
8
Max_Base_Digits : constant := root_real'Digits; Max_Digits : constant := implementation−defined;
9
Max_Mantissa : constant := implementation−defined; Fine_Delta : constant := implementation−defined;
10
Tick : constant := implementation−defined;
11
−− Storage−related Declarations:
12
type Address is implementation−defined; Null_Address : constant Address;
13
Storage_Unit : constant := implementation−defined; Word_Size : constant := implementation−defined * Storage_Unit; Memory_Size : constant := implementation−defined;
14
−− Address Comparison: function "<" (Left, Right : Address) return Boolean; function "<="(Left, Right : Address) return Boolean; function ">" (Left, Right : Address) return Boolean; function ">="(Left, Right : Address) return Boolean; function "=" (Left, Right : Address) return Boolean; −− function "/=" (Left, Right : Address) return Boolean; −− "/=" is implicitly defined pragma Convention(Intrinsic, "<"); ... −− and so on for all language−defined subprograms in this package
15/2
−− Other System−Dependent Declarations: type Bit_Order is (High_Order_First, Low_Order_First); Default_Bit_Order : constant Bit_Order := implementation−defined;
16
−− Priority−related declarations (see D.1): subtype Any_Priority is Integer range implementation−defined; subtype Priority is Any_Priority range Any_Priority'First .. implementation−defined; subtype Interrupt_Priority is Any_Priority range Priority'Last+1 .. Any_Priority'Last;
17
Default_Priority : constant Priority := (Priority'First + Priority'Last)/2;
18
private ... −− not specified by the language end System;
19
Name is an enumeration subtype. Values of type Name are the names of alternative machine configurations handled by the implementation. System_Name represents the current machine configuration.
20
The named numbers Fine_Delta and Tick are of the type universal_real; the others are of the type universal_integer.
21
The meanings of the named numbers are:
22
Min_Int
The smallest (most negative) value allowed for the expressions of a signed_integer_type_definition (see 3.5.4).
23
Max_Int
The largest (most positive) value allowed for the expressions of a signed_integer_type_definition (see 3.5.4).
24
Max_Binary_Modulus
A power of two such that it, and all lesser positive powers of two, are allowed as the modulus of a modular_type_definition.
25
Max_Nonbinary_Modulus
A value such that it, and all lesser positive integers, are allowed as the modulus of a modular_type_definition.
26
Max_Base_Digits
The largest value allowed for the requested decimal precision in a floating_point_definition (see 3.5.7).
27
Max_Digits
The largest value allowed for the requested decimal precision in a floating_point_definition (see 3.5.7) that has no real_range_specification (see 3.5.7). Max_Digits is less than or equal to Max_Base_Digits.
28
Max_Mantissa
The largest possible number of binary digits in the mantissa of machine numbers of a user−defined ordinary fixed point type. (The mantissa is defined in Annex G.)
29
Fine_Delta
The smallest delta allowed in an ordinary_fixed_point_definition that has the real_range_specification (see 3.5.7) range −−1.0 .. 1.0.
30
Tick
A period in seconds approximating the real time interval during which the value of Calendar.Clock remains constant.
31
Storage_Unit
The number of bits per storage element.
32
Word_Size
The number of bits per word.
33
Memory_Size
An implementation−defined value that is intended to reflect the memory size of the configuration in storage elements.
34/2
Address is a definite, nonlimited type with preelaborable initialization (see 10.2.1). Address represents machine addresses capable of addressing individual storage elements. Null_Address is an address that is distinct from the address of any object or program unit. 35/2
Default_Bit_Order shall be a static constant. See 13.5.3 for an explanation of Bit_Order and Default_Bit_Order.
36/2
An implementation may add additional implementation−defined declarations to package System and its children. However, it is usually better for the implementation to provide additional functionality via implementation−defined children of System.
37
Address should be a private type.
NOTES
38
14 There are also some language−defined child packages of System defined elsewhere.