Справочник по Ada 2012
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