Справочник по Ada (Ada 2022)
13.6 Изменение представления
Преобразование типа (см. type_conversion) (см. 4.6) может использоваться для преобразования между двумя различными представлениями одного и того же массива или записи. Для преобразования массива из одного представления в другое требуются два типа массивов с совпадающими подтипами компонентов и преобразуемыми типами индексов. Если для одного типа указано Pack, а для другого нет, то для упаковки или распаковки массива можно использовать явное преобразование.
Для преобразования немеченых записей из одного представления в другое требуются два типа записей с общим типом предка. Для типов записей можно указать различные представления, а для осуществления изменения представления можно использовать явное преобразование между типами.
Примеры
Пример изменения представления:
-- Packed_Descriptor и Descriptor — два разных типа
-- с идентичными характеристиками, за исключением их
-- представления
-- с идентичными характеристиками, за исключением их
-- представления
type Descriptor is
record
-- компоненты дескриптора
end record;
record
-- компоненты дескриптора
end record;
type Packed_Descriptor is new Descriptor;
for Packed_Descriptor use
record
-- пункты компонентов для некоторых или для всех компонентов
end record;
record
-- пункты компонентов для некоторых или для всех компонентов
end record;
-- Изменение представления теперь можно выполнить с помощью явных преобразований типов:
D : Descriptor;
P : Packed_Descriptor;
P : Packed_Descriptor;
P := Packed_Descriptor(D); -- упаковать D
D := Descriptor(P); -- распаковать P
D := Descriptor(P); -- распаковать P