13.7 The Package System

From OC Systems Wiki!
< Guide:95lrm
Revision as of 23:36, 4 May 2019 by imported>WikiVisor (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

For each implementation there is a library package called System which includes the definitions of certain configuration-dependent characteristics.

Static Semantics

The following language-defined library package exists:

package System is 
    pragma Preelaborate(System);

    type Name is implementation-defined-enumeration-type; 
    System_Name : constant Name := implementation-defined;

    -- System-Dependent Named Numbers:

    Min_Int               : constant := root_integer'First; 
    Max_Int               : constant := root_integer'Last;

    Max_Binary_Modulus    : constant := implementation-defined; 
    Max_Nonbinary_Modulus : constant := implementation-defined;

    Max_Base_Digits       : constant := root_real'Digits; 
    Max_Digits            : constant := implementation-defined;

    Max_Mantissa          : constant := implementation-defined; 
    Fine_Delta            : constant := implementation-defined;

    Tick                  : constant := implementation-defined;

    -- Storage-related Declarations:

    type Address is implementation-defined; 
    Null_Address : constant Address;

    Storage_Unit : constant := implementation-defined; 
    Word_Size    : constant := implementation-defined * Storage_Unit; 
    Memory_Size  : constant := implementation-defined;

    -- 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

    -- Other System-Dependent Declarations:    
    type Bit_Order is (High_Order_First, Low_Order_First); 
    Default_Bit_Order : constant Bit_Order;

    -- 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;

    Default_Priority : constant Priority :=
           (Priority'First + Priority'Last)/2;

private
    ... -- not specified by the language
end System;

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.

The named numbers Fine_Delta and Tick are of the type universal_real; the others are of the type universal_integer.

The meanings of the named numbers are:

 Min_Int
The smallest (most negative) value allowed for the expressions of a signed_integer_type_definition.
 Max_Int
The largest (most positive) value allowed for the expressions of a signed_integer_type_definition.
 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.
 Max_Nonbinary_Modulus
A value such that it, and all lesser positive integers, are allowed as the modulus of a modular_type_definition.
 Max_Base_Digits
The largest value allowed for the requested decimal precision in a floating_point_definition.
 Max_Digits
The largest value allowed for the requested decimal precision in a floating_point_definition that has no real_range_specification. Max_Digits is less than or equal to Max_Base_Digits.
 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.)
 Fine_Delta
The smallest delta allowed in an ordinary_fixed_point_definition that has the real_range_specification range -1.0 .. 1.0.
 Tick
A period in seconds approximating the real time interval during which the value of Calendar.Clock remains constant.
 Storage_Unit
The number of bits per storage element.
 Word_Size
The number of bits per word.
 Memory_Size
An implementation-defined value that is intended to reflect the memory size of the configuration in storage elements.

Address is of a definite, nonlimited type. 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.

See 13.5.3 for an explanation of Bit_Order and Default_Bit_Order.

Implementation Permissions

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. Package System may be declared pure.

Implementation Advice

Address should be a private type.

Notes

14  There are also some language-defined child packages of System defined elsewhere.

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual