Руководство по Ada (Ada 2022)
13.7.1 Пакет System.Storage_Elements
Статическая семантика
Существует следующая определяемая языком библиотечная библиотека:
package System.Storage_Elements
with Pure is
with Pure is
type Storage_Offset is range определяется реализацией;
subtype Storage_Count is Storage_Offset range 0..Storage_Offset'Last;
type Storage_Element is mod определяется реализацией;
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;
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;
-- Арифметика адресов:
function "+"(Left : Address; Right : Storage_Offset) return Address
with Convention => Intrinsic;
function "+"(Left : Storage_Offset; Right : Address) return Address
with Convention => Intrinsic;
function "-"(Left : Address; Right : Storage_Offset) return Address
with Convention => Intrinsic;
function "-"(Left, Right : Address) return Storage_Offset
with Convention => Intrinsic;
with Convention => Intrinsic;
function "+"(Left : Storage_Offset; Right : Address) return Address
with Convention => Intrinsic;
function "-"(Left : Address; Right : Storage_Offset) return Address
with Convention => Intrinsic;
function "-"(Left, Right : Address) return Storage_Offset
with Convention => Intrinsic;
function "mod"(Left : Address; Right : Storage_Offset)
return Storage_Offset
with Convention => Intrinsic;
return Storage_Offset
with Convention => Intrinsic;
-- Преобразование в/из целых чисел:
type Integer_Address is определяется реализацией;
function To_Address(Value : Integer_Address) return Address
with Convention => Intrinsic;
function To_Integer(Value : Address) return Integer_Address
with Convention => Intrinsic;
function To_Address(Value : Integer_Address) return Address
with Convention => Intrinsic;
function To_Integer(Value : Address) return Integer_Address
with Convention => Intrinsic;
end System.Storage_Elements;
Storage_Element представляет элемент хранилища. Storage_Offset представляет смещение в элементах хранилища. Storage_Count представляет количество элементов хранилища. Storage_Array представляет собой непрерывную последовательность элементов хранилища.
Integer_Address — это подтип (целого или модульного) целого числа. To_Address и To_Integer преобразуют значения между этим типом и Address.
Требования к реализации
Storage_Offset'Last должен быть больше или равен Integer'Last или максимальному возможному смещению в хранилище, в зависимости от того, что меньше. Storage_Offset'First должен быть <= (–Storage_Offset'Last).
Абзац 15 был удален.
Рекомендации по реализации
Операции в System и ее подпакетах должны максимально точно отражать семантику целевой среды. Например, на большинстве машин арифметика адресов имеет смысл «обнуляться». Операции, которые не имеют смысла, должны вызывать Program_Error.