Ada Conformity Assessment Authority      Home Conformity Assessment   Test Suite ARGAda Standard
Annotated Ada Reference Manual (Ada 2022 Draft 35)Legal Information
Contents   Index   References   Search   Previous   Next 

13.6 Change of Representation

{AI05-0229-1} {AI12-0445-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 are required. If one type has Pack specified and the other does not, then explicit conversion can be used to pack or unpack an array.
{AI12-0425-1} {AI12-0445-1} To convert an untagged a record from one representation to another, two record types with a common ancestor type are required 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.] 
Ramification: {AI12-0425-1} The language does not allow implicit copying of by-reference types, so it also does not allow different representations of related by-reference types. Similarly, language rules prevent related tagged types from having different representations of the parent part. Therefore, this This technique cannot be used does not work if the first type is an untagged type with user-defined primitive subprograms. It does not work at all for tagged or by-reference types. 


Example of change of representation: 
-- Packed_Descriptor and Descriptor are two different types
-- with identical characteristics, apart from their
-- representation
type Descriptor is
      -- components of a descriptor
    end record;
type Packed_Descriptor is new Descriptor;
for Packed_Descriptor use
      -- component clauses for some or for all components
    end record;
-- Change of representation can now be accomplished by explicit type conversions:
D : Descriptor;
P : Packed_Descriptor;
P := Packed_Descriptor(D);  -- pack D
D := Descriptor(P);         -- unpack P

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe