Package: System.Storage_Elements

Dependencies

pragma Warnings (Off);
This is to stop bootstrap problems with the use of Inline_Always To be removed (along with redundant Inline pragmas) in 3.13.

Description

Warning: declarations in this package are ambiguous with respect to the extra declarations that can be introduced into System using Extend_System. It is a good idea to avoid use clauses for this package!

Header

package System.Storage_Elements is
 
pragma Pure (Storage_Elements);

Note that we take advantage of the implementation permission to make this unit Pure instead of Preelaborable; see RM 13.7.1(15).

Type Summary

Integer_Address
Storage_Array
Storage_Element
Storage_Offset

Other Items:

type Storage_Offset is range
  -(2 ** (Standard."-" (Standard'Address_Size, 1))) ..
  +(2 ** (Standard."-" (Standard'Address_Size, 1))) - 1;
Note: the reason for the qualification of "-" here by Standard is that we have a current bug in GNAT that otherwise causes a bogus ambiguity when this unit is analyzed in an Rtsfind context.

subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;

type Storage_Element is mod 2 ** Storage_Unit;
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;
Address arithmetic

function "+" (Left : Address; Right : Storage_Offset) return Address;

pragma Convention (Intrinsic, "+");

pragma Inline ("+");

pragma Inline_Always ("+");

function "+" (Left : Storage_Offset; Right : Address) return Address;

pragma Convention (Intrinsic, "+");

pragma Inline ("+");

pragma Inline_Always ("+");

function "-" (Left : Address; Right : Storage_Offset) return Address;

pragma Convention (Intrinsic, "-");

pragma Inline ("-");

pragma Inline_Always ("-");

function "-" (Left, Right : Address) return Storage_Offset;

pragma Convention (Intrinsic, "-");

pragma Inline ("-");

pragma Inline_Always ("-");

function "mod"
  (Left  : Address;
   Right : Storage_Offset)
   return  Storage_Offset;

pragma Convention (Intrinsic, "mod");

pragma Inline ("mod");

pragma Inline_Always ("mod");
Conversion to/from integers

type Integer_Address is mod Memory_Size;

function To_Address (Value : Integer_Address) return Address;
pragma Convention (Intrinsic, To_Address);
pragma Inline (To_Address);

pragma Inline_Always (To_Address);

function To_Integer (Value : Address) return Integer_Address;
pragma Convention (Intrinsic, To_Integer);
pragma Inline (To_Integer);

pragma Inline_Always (To_Integer);
end System.Storage_Elements;