13.7.1 The Package System.Storage_Elements
The following language-defined
library package exists:
Storage_Offset is range implementation-defined
Storage_Element is mod implementation-defined
Storage_Array is array
<>) of aliased
function "+"(Left : Address; Right : Storage_Offset)
function "+"(Left : Storage_Offset; Right : Address)
function "-"(Left : Address; Right : Storage_Offset)
function "-"(Left, Right : Address)
function "mod"(Left : Address; Right : Storage_Offset)
-- Conversion to/from integers:
Integer_Address is implementation-defined
To_Address(Value : Integer_Address) return
To_Integer(Value : Address) return
pragma Convention(Intrinsic, "+");
-- ...and so on for all language-defined subprograms declared in this package.
Storage_Element represents a storage element. Storage_Offset
represents an offset in storage elements. Storage_Count represents a
number of storage elements.
represents a contiguous sequence of storage elements.
Integer_Address is a (signed or modular) integer
subtype. To_Address and To_Integer convert back and forth between this
type and Address.
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).
This paragraph was
Operations in System and its children should reflect
the target environment semantics as closely as is reasonable. For example,
on most machines, it makes sense for address arithmetic to “wrap
Operations that do not make sense
should raise Program_Error.