13.6 Change of Representation
1/3
{
AI05-0229-1} 
[
 A 
type_conversion 
(see 
4.6) can be used to convert between two 
different representations of the same array or record. To convert an 
array from one representation to another, two array types need to be 
declared with matching component subtypes, and convertible index types. 
If one type has 
Pack packing 
specified and the other does not, then explicit conversion can be used 
to pack or unpack an array.
 
2
To convert a record from one representation to another, 
two record types with a common ancestor type need to be declared, with 
no inherited subprograms. Distinct representations can then be specified 
for the record types, and explicit conversion between the types can be 
used to effect a change in representation.] 
2.a
Ramification: This technique does not 
work if the first type is an untagged type with user-defined primitive 
subprograms. It does not work at all for tagged types. 
Examples
3
Example of change 
of representation: 
4
-- Packed_Descriptor and Descriptor are two different types
-- with identical characteristics, apart from their
-- representation
5
type Descriptor is
    record
      -- components of a descriptor
    end record;
6
type Packed_Descriptor is new Descriptor;
7
for Packed_Descriptor use
    record
      -- component clauses for some or for all components
    end record;
8
-- Change of representation can now be accomplished by explicit type conversions:
9
D : Descriptor;
P : Packed_Descriptor;
10
P := Packed_Descriptor(D);  -- pack D
D := Descriptor(P);         -- unpack P
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe