13.6 Change of Representation

From OC Systems Wiki!
Jump to: navigation, search

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 packing specified and the other does not, then explicit conversion can be used to pack or unpack an array.

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.

Examples

Example of change of representation:

-- Packed_Descriptor and Descriptor are two different types 
-- with identical characteristics, apart from their 
-- representation

type Descriptor is
    record
        -- components of a descriptor
    end record;

type Packed_Descriptor is new Descriptor;

for Packed_Descriptor use
    record
        -- 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

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual