Справочник по Ada 2005
13.7.1 Пакет System.Storage_Elements
Статическая семантика
Существует следующий пакет библиотеки, определенный языком:
package System.Storage_Elements is
pragma Pure(Storage_Elements);
pragma Pure(Storage_Elements);
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;
function "+"(Left : Storage_Offset; Right : Address)
return Address;
function "-"(Left : Address; Right : Storage_Offset)
return Address;
function "-"(Left, Right : Address)
return 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;
function "mod"(Left : Address; Right : Storage_Offset)
return Storage_Offset;
return Storage_Offset;
-- Преобразование в/из целых чисел:
type Integer_Address is определяется реализацией;
function To_Address(Value : Integer_Address) return Address;
function To_Integer(Value : Address) return Integer_Address;
function To_Address(Value : Integer_Address) return Address;
function To_Integer(Value : Address) return Integer_Address;
pragma Convention(Intrinsic, "+");
-- ...и так далее для всех подпрограмм, определённых языком в этом пакете.
end System.Storage_Elements;
-- ...и так далее для всех подпрограмм, определённых языком в этом пакете.
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).
Разрешения для реализации
Этот абзац был удален.
Рекомендации для реализации
Операции в System и его дочерних элементах должны в наибольшей степени отражать семантику целевой среды. Например, на большинстве машин арифметика адресов имеет смысл «перезаписи». Операции, которые не имеют смысла, должны вызывать Program_Error.