Contents Index Previous Next
13.7.1 The Package System.Storage_Elements
Static Semantics
1
The following language-defined
library package exists:
2
package System.Storage_Elements is
pragma Preelaborate(System.Storage_Elements);
3
type Storage_Offset is range implementation-defined;
4
subtype Storage_Count is Storage_Offset range 0..Storage_Offset'Last;
5
type Storage_Element is mod implementation-defined;
for Storage_Element'Size use Storage_Unit;
type Storage_Array is array
(Storage_Offset range <>) of aliased Storage_Element;
for Storage_Array'Component_Size use Storage_Unit;
6
7
function "+"(Left : Address; Right : Storage_Offset)
return Address;
function "+"(Left : Storage_Offset; Right : Address)
return Address;
function "-"(Left : Address; Right : Storage_Offset)
return Address;
function "-"(Left, Right : Address)
return Storage_Offset;
8
function "mod"(Left : Address; Right : Storage_Offset)
return Storage_Offset;
9
-- Conversion to/from integers:
10
type Integer_Address is implementation-defined;
function To_Address(Value : Integer_Address) return Address;
function To_Integer(Value : Address) return Integer_Address;
11
pragma Convention(Intrinsic, "+");
-- ...and so on for all language-defined subprograms declared in this package.
end System.Storage_Elements;
12
Storage_Element represents a storage element.
Storage_Offset represents an offset in storage elements. Storage_Count
represents a number of storage elements.
Storage_Array
represents a contiguous sequence of storage elements.
13
Integer_Address is a (signed or modular) integer
subtype. To_Address and To_Integer convert back and forth between this
type and Address.
Implementation Requirements
14
Storage_Offset'Last shall be greater than or
equal to Integer'Last or the largest possible storage offset, whichever
is smaller. Storage_Offset'First shall be <= (-Storage_Offset'Last).
Implementation Permissions
15
Package System.Storage_Elements may be declared
pure.
Implementation Advice
16
Operations in System and its children should
reflect the target environment semantics6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; ma