comp.lang.ada
 help / color / mirror / Atom feed
* Determining value of record discriminant
@ 2010-07-19 22:36 deadlyhead
  2010-07-20  0:26 ` Jeffrey R. Carter
  0 siblings, 1 reply; 4+ messages in thread
From: deadlyhead @ 2010-07-19 22:36 UTC (permalink / raw)


Say I have a discriminated record with the following definition


--  code begins
type Discrim_Val is (Int, Str);

type Discrim_Rec (D : Discrim_Val) is record
   case D is
      when Int =>
         Val_Int : Integer := 1_000_000;
      when Str =>
         Val_Str : String (1 .. 11) := "One million";
   end case;
end record;
--  code ends


Is there any way to determine what the discriminant value was on a
type later on, i.e. with a dynamically allocated Discrim_Rec object
created with user input for D?  A haven't found anything looking
through the RM about attributes or anything providing this
functionality.

Thanks!
-- deadlyhead



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

* Re: Determining value of record discriminant
  2010-07-19 22:36 Determining value of record discriminant deadlyhead
@ 2010-07-20  0:26 ` Jeffrey R. Carter
  2010-07-20  0:33   ` deadlyhead
  2010-07-20  8:53   ` Maciej Sobczak
  0 siblings, 2 replies; 4+ messages in thread
From: Jeffrey R. Carter @ 2010-07-20  0:26 UTC (permalink / raw)


On 07/19/2010 03:36 PM, deadlyhead wrote:
>
> --  code begins
> type Discrim_Val is (Int, Str);
>
> type Discrim_Rec (D : Discrim_Val) is record
>     case D is
>        when Int =>
>           Val_Int : Integer := 1_000_000;
>        when Str =>
>           Val_Str : String (1 .. 11) := "One million";
>     end case;
> end record;
> --  code ends
>
> Is there any way to determine what the discriminant value was on a
> type later on, i.e. with a dynamically allocated Discrim_Rec object
> created with user input for D?  A haven't found anything looking
> through the RM about attributes or anything providing this
> functionality.

V : Discrim_Rec := Some_Func;

case V.D is
when Int =>
    ...
when Str =>
    ...
end case;

The discriminant is a field just like any other.

-- 
Jeff Carter
"How'd you like to hide the egg and gurgitate
a few saucers of mocha java?"
Never Give a Sucker an Even Break
101



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

* Re: Determining value of record discriminant
  2010-07-20  0:26 ` Jeffrey R. Carter
@ 2010-07-20  0:33   ` deadlyhead
  2010-07-20  8:53   ` Maciej Sobczak
  1 sibling, 0 replies; 4+ messages in thread
From: deadlyhead @ 2010-07-20  0:33 UTC (permalink / raw)


On Jul 19, 5:26 pm, "Jeffrey R. Carter"
<spam.jrcarter....@spam.acm.org> wrote:
> On 07/19/2010 03:36 PM, deadlyhead wrote:
>
>
>
>
>
> > --  code begins
> > type Discrim_Val is (Int, Str);
>
> > type Discrim_Rec (D : Discrim_Val) is record
> >     case D is
> >        when Int =>
> >           Val_Int : Integer := 1_000_000;
> >        when Str =>
> >           Val_Str : String (1 .. 11) := "One million";
> >     end case;
> > end record;
> > --  code ends
>
> > Is there any way to determine what the discriminant value was on a
> > type later on, i.e. with a dynamically allocated Discrim_Rec object
> > created with user input for D?  A haven't found anything looking
> > through the RM about attributes or anything providing this
> > functionality.
>
> V : Discrim_Rec := Some_Func;
>
> case V.D is
> when Int =>
>     ...
> when Str =>
>     ...
> end case;
>
> The discriminant is a field just like any other.
>
> --
> Jeff Carter
> "How'd you like to hide the egg and gurgitate
> a few saucers of mocha java?"
> Never Give a Sucker an Even Break
> 101

Thank you!  I really don't know how I missed that.



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

* Re: Determining value of record discriminant
  2010-07-20  0:26 ` Jeffrey R. Carter
  2010-07-20  0:33   ` deadlyhead
@ 2010-07-20  8:53   ` Maciej Sobczak
  1 sibling, 0 replies; 4+ messages in thread
From: Maciej Sobczak @ 2010-07-20  8:53 UTC (permalink / raw)


On 20 Lip, 02:26, "Jeffrey R. Carter" <spam.jrcarter....@spam.acm.org>
wrote:

> The discriminant is a field just like any other.

It is read-only for the lifetime of the given object and it also
cannot be aliased.

AARM says that discriminants are components of the object, but I think
that this is a bit misleading, as their use is restricted. I think
that in some cases the compiler might completely eliminate them out of
existence as a matter of space optimization and still provide the same
syntax for reading their values.

--
Maciej Sobczak * http://www.inspirel.com

YAMI4 - Messaging Solution for Distributed Systems
http://www.inspirel.com/yami4



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

end of thread, other threads:[~2010-07-20  8:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-19 22:36 Determining value of record discriminant deadlyhead
2010-07-20  0:26 ` Jeffrey R. Carter
2010-07-20  0:33   ` deadlyhead
2010-07-20  8:53   ` Maciej Sobczak

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