comp.lang.ada
 help / color / mirror / Atom feed
* Alternate to Unchecked_Conversion - Portable?
@ 1999-02-21  0:00 Steve Doiel
  1999-02-21  0:00 ` Steve Quinlan
                   ` (4 more replies)
  0 siblings, 5 replies; 38+ messages in thread
From: Steve Doiel @ 1999-02-21  0:00 UTC (permalink / raw)


I discovered a technique for performing a similar function to
Unchecked_Conversion.  Locating two data structures at the same address by
defining the first normally and then using an address clause to locate the
second at the same address as the first (as shown in the following sample):


WITH Ada.Text_Io;
WITH Interfaces;
 USE Interfaces;
PROCEDURE TestAlias IS
  PACKAGE Text_Io RENAMES Ada.Text_Io;

  TYPE aRec IS
    RECORD
      f1 : Integer_32;
      f2 : Integer_32;
    END RECORD;

  TYPE Integer_16_Array IS ARRAY( Positive RANGE <> ) OF Integer_16;

  v1 : aRec;
  v2 : Integer_16_Array( 1..4 );
  FOR v2'ADDRESS USE v1'ADDRESS;    -- This causes v1 and v2 to occupy the
same memory

BEGIN
  v1.f1 := 1;
  v1.f2 := 2;
  FOR ii IN v2'RANGE LOOP
    Text_Io.Put( Integer_16'IMAGE( v2( ii ) ) );
  END LOOP;
  Text_Io.New_Line;
END TestAlias;


My question is: is this portable?

I expect that record layouts will be dependent on different endian machines,
and I know that this technique is inherently unsafe, but it makes things
very simple.

SteveD






^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~1999-03-01  0:00 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-02-21  0:00 Alternate to Unchecked_Conversion - Portable? Steve Doiel
1999-02-21  0:00 ` Steve Quinlan
1999-02-22  0:00   ` robert_dewar
1999-02-21  0:00 ` Matthew Heaney
1999-02-22  0:00 ` robert_dewar
1999-02-22  0:00   ` Samuel Mize
1999-02-22  0:00 ` Christopher Green
1999-02-23  0:00   ` Matthew Heaney
1999-02-23  0:00     ` Samuel Mize
1999-02-24  0:00     ` robert_dewar
1999-02-25  0:00       ` Nick Roberts
1999-02-25  0:00         ` robert_dewar
1999-02-26  0:00           ` Nick Roberts
1999-02-26  0:00             ` Matthew Heaney
1999-02-27  0:00               ` Nick Roberts
1999-02-24  0:00   ` robert_dewar
1999-02-23  0:00     ` Christopher Green
1999-02-25  0:00       ` robert_dewar
1999-02-24  0:00         ` Christopher Green
1999-02-25  0:00           ` robert_dewar
1999-02-26  0:00             ` Dale Stanbrough
1999-02-26  0:00               ` Robert A Duff
1999-02-23  0:00     ` Christopher Green
1999-02-25  0:00       ` robert_dewar
1999-02-24  0:00         ` Christopher Green
1999-02-25  0:00           ` robert_dewar
1999-02-25  0:00             ` dennison
1999-02-25  0:00               ` Christopher Green
1999-02-26  0:00                 ` robert_dewar
1999-02-26  0:00                   ` Christopher Green
1999-03-01  0:00                     ` Nick Roberts
1999-03-01  0:00                       ` dewar
1999-03-01  0:00                         ` Nick Roberts
1999-02-26  0:00                 ` Tom Moran
1999-02-26  0:00                   ` robert_dewar
1999-02-26  0:00             ` Robert A Duff
1999-02-28  0:00               ` robert_dewar
1999-02-22  0:00 ` Tom Moran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox