with Unchecked_Conversion; | |
package Rep_Clause2 is | |
type Tiny is range 0 .. 3; | |
for Tiny'Size use 2; | |
type Small is range 0 .. 255; | |
for Small'Size use 8; | |
type Small_Data is record | |
D : Tiny; | |
N : Small; | |
end record; | |
pragma Pack (Small_Data); | |
type Chunk is | |
record | |
S : Small_Data; | |
C : Character; | |
end record; | |
for Chunk use record | |
S at 0 range 0 .. 15; | |
C at 2 range 0 .. 7; | |
end record; | |
type Index is range 1 .. 10; | |
type Data_Array is array (Index) of Chunk; | |
for Data_Array'Alignment use 2; | |
pragma Pack (Data_Array); | |
type Data is record | |
D : Data_Array; | |
end record; | |
type Bit is range 0 .. 1; | |
for Bit'Size use 1; | |
type Bit_Array is array (Positive range <>) of Bit; | |
pragma Pack (Bit_Array); | |
type Byte is new Bit_Array (1 .. 8); | |
for Byte'Size use 8; | |
for Byte'Alignment use 1; | |
function Conv | |
is new Unchecked_Conversion(Source => Small, Target => Byte); | |
procedure Assign (From : Data; Offset : Positive; I : Index; To : out Bit_Array); | |
end Rep_Clause2; |