comp.lang.ada
 help / color / mirror / Atom feed
From: Lutz Donnerhacke <lutz@iks-jena.de>
Subject: Re: Disriminant question
Date: Fri, 7 Mar 2003 11:17:07 +0000 (UTC)
Date: 2003-03-07T11:17:07+00:00	[thread overview]
Message-ID: <slrnb6gvth.nt.lutz@taranis.iks-jena.de> (raw)
In-Reply-To: d40d7104.0303062309.51039897@posting.google.com

* prashna wrote:
> How to change discriminant value dynamically?

This is impossible. You can't change the discriminant, because the
instantiated variables does occupy different space. But you can set the
discriminant dynamically.

$ cat t.adb
with Ada.Text_IO;
use Ada.Text_IO;

procedure t is
   type DISC(some_disc : integer) is
     record
      case some_disc is
	 when 1 | 2 =>
	    int1, int2, int3 : integer;
	 when others =>
	    flt : float;
      end case;
   end record;
   
   function f (i : Integer) return DISC is
   begin
      declare
	 d : DISC(i);
      begin
	 return d;
      end;
   end f;
   
   disk1 : DISC(1);
   disk3 : DISC(3);

begin
   Put_Line ("disk1'Size =" & Natural'Image (disk1'Size));
   Put_Line ("disk3'Size =" & Natural'Image (disk3'Size));
   for i in 1 .. 5 loop
      declare
	 d : DISC(i);
      begin
	 Put_Line ("d'Size =" & Natural'Image (d'Size));
      end;
   end loop;
   for i in 1 .. 5 loop
      declare
	 e : DISC := f (i);
      begin
	 Put_Line ("e'Size =" & Natural'Image (e'Size));
      end;
   end loop;
end t;
$ t
disk1'Size = 128
disk3'Size = 64
d'Size = 128
d'Size = 128
d'Size = 64
d'Size = 64
d'Size = 64
e'Size = 128
e'Size = 128
e'Size = 64
e'Size = 64
e'Size = 64





  parent reply	other threads:[~2003-03-07 11:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-07  7:09 Disriminant question prashna
2003-03-07  8:01 ` tmoran
2003-03-07 11:20   ` Lutz Donnerhacke
2003-03-07 17:59     ` tmoran
2003-03-07 22:32       ` Lutz Donnerhacke
2003-03-07 11:17 ` Lutz Donnerhacke [this message]
2003-03-07 16:46   ` Matthew Heaney
2003-03-12  9:25     ` Disriminant question - Waiting desperately for solution :-( prashna
2003-03-12 16:12       ` Gautier
replies disabled

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