comp.lang.ada
 help / color / mirror / Atom feed
From: ganesh.ramasivan@gdcanada.com (Ganesh Ramasivan)
Subject: Variant Record Sizes..
Date: 19 Aug 2004 11:48:25 -0700
Date: 2004-08-19T11:48:25-07:00	[thread overview]
Message-ID: <e8f9995c.0408191048.5d250173@posting.google.com> (raw)

Hello,

I am having a hard time understanding variant records with regard to
memory usage. Does the size of the record become the size of the
largest element in that record?

So in case of the example below, is the size of the Test_Record 2
bytes, even though the "use 8" clause has been specified as the other
element of the record specifies "use 16".

Any input will be appreciated.

Thanks,

Ganesh

------------------------
with ada.text_io;

procedure Variant is

  package int_io is new ada.text_io.integer_io(Integer);

  type TEST_STATE_CHOICE     is (DISABLE, ENABLE);
  for  TEST_STATE_CHOICE'SIZE use 8;

  type OTHER_STATE_CHOICE     is (ON, OFF);
  for  OTHER_STATE_CHOICE'SIZE use 16;  

  type TEST_ICP_POI_MESSAGE_ID_CHOICE is (STATE_1, STATE_2);
  for TEST_ICP_POI_MESSAGE_ID_CHOICE'SIZE use 8;

  type TEST_ICP_POI_MESSAGE_TYPE 
   (ICP_POI_MESSAGE_ID : TEST_ICP_POI_MESSAGE_ID_CHOICE) is
    record
      case ICP_POI_MESSAGE_ID is
        when STATE_1 =>
          ICP_STATE : TEST_STATE_CHOICE;
	when STATE_2 =>
	  PING_STATE : OTHER_STATE_CHOICE;
        when others =>
          null;
      end case;
    end record;
    
    pragma pack (TEST_ICP_POI_MESSAGE_TYPE);
    
    Test_Record : TEST_ICP_POI_MESSAGE_TYPE(STATE_1);
    Record_Size : INTEGER := 0;
begin
  Record_Size := Test_Record'Size/8;
  ada.text_io.put("Record Size = ");
  int_io.put(Record_Size); ada.text_io.new_line;
end Variant;
--------------------------



             reply	other threads:[~2004-08-19 18:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-19 18:48 Ganesh Ramasivan [this message]
2004-08-19 19:29 ` Variant Record Sizes Martin Dowie
2004-08-20 14:09   ` Ganesh Ramasivan
2004-08-19 19:30 ` Jeffrey Carter
replies disabled

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