Go to the first, previous, next, last section, table of contents.

Package Interfaces is the parent of several library packages that
declare types and other entities useful for interfacing to foreign
languages. It also contains some implementationdefined types that are
useful across more than one language (in particular for interfacing to
assembly language).
Static Semantics

The library package Interfaces has the following skeletal declaration:

package Interfaces is
pragma Pure(Interfaces);

type Integer_n is range 2**(n1) .. 2**(n1)  1;
 2's complement

type Unsigned_n is mod 2**n;

function Shift_Left (Value : Unsigned_n;
Amount : Natural) return Unsigned_n;
function Shift_Right (Value : Unsigned_n;
Amount : Natural) return Unsigned_n;
function Shift_Right_Arithmetic (Value : Unsigned_n;
Amount : Natural)
return Unsigned_n;
function Rotate_Left (Value : Unsigned_n;
Amount : Natural) return Unsigned_n;
function Rotate_Right (Value : Unsigned_n;
Amount : Natural) return Unsigned_n;
...
end Interfaces;
Implementation Requirements

An implementation shall provide the following declarations in the
visible part of package Interfaces:

Signed and modular integer types of n bits, if supported by the target
architecture, for each n that is at least the size of a storage element
and that is a factor of the word size. The names of these types are of
the form Integer_n for the signed types, and Unsigned_n for the modular
types;

For each such modular type in Interfaces, shifting and rotating
subprograms as specified in the declaration of Interfaces above. These
subprograms are Intrinsic. They operate on a bitbybit basis, using the
binary representation of the value of the operands to yield a binary
representation for the result. The Amount parameter gives the number of
bits by which to shift or rotate. For shifting, zero bits are shifted
in, except in the case of Shift_Right_Arithmetic, where one bits are
shifted in if Value is at least half the modulus.

Floating point types corresponding to each floating point format fully
supported by the hardware.
Implementation Permissions

An implementation may provide implementationdefined library units that
are children of Interfaces, and may add declarations to the visible part
of Interfaces in addition to the ones defined above.
 Implementation Advice

For each implementationdefined convention identifier, there should be a
child package of package Interfaces with the corresponding name. This
package should contain any declarations that would be useful for
interfacing to the language (implementation) represented by the
convention. Any declarations useful for interfacing to any language on
the given hardware architecture should be provided directly in
Interfaces.

An implementation supporting an interface to C, COBOL, or Fortran should
provide the corresponding package or packages described in the following
clauses.
Go to the first, previous, next, last section, table of contents.