comp.lang.ada
 help / color / mirror / Atom feed
From: Brian Rogoff <bpr@shell5.ba.best.com>
Subject: Re: How to write TYPECASE in Ada 95?
Date: 1999/02/05
Date: 1999-02-05T00:00:00+00:00	[thread overview]
Message-ID: <Pine.BSF.4.05.9902051123560.3807-100000@shell5.ba.best.com> (raw)
In-Reply-To: 79fct8$9k3$1@murdoch.acc.Virginia.EDU

On 5 Feb 1999, Norman Ramsey wrote:
> 
> I'm trying to figure out from the reference manual how to identify
> which type extension of a type I have.  For example, if I have
> 
>    type Point is tagged
>          record
>            X, Y : Real := 0.0;
>          end record;
> 
>    type Painted_Point is new Point with
>          record
>            Paint : Color := White;
>          end record;
> 
> 
>    type Tall_Point is new Point with
>          record
>            Height : Real := 0.0;
>          end record;
> 
> I'd like to be able to discriminate at run time:
> 
>    p : Point;
> 
>      ...
> 
>    if p in Painted_Point then
>       ... do something with Painted_Point'(p)
>    else if p in Tall_Point then
>       ... do something with Tall_Point'(p)
> 
> Even better would be something like Modula-3 TYPECASE:
> 
>   (* modula-3 *)
>   TYPECASE p OF
>   Painted_Point (painted) => ... do something with painted
>   Tall_Point    (tail)    => ... do something with tall
>     ...
>   END
> 
> What's the idiomatic way to express this in Ada?

There is no typecase, but if you want exact tag comparisons you can 
use 

	if p'Tag = Painted_Point then
		... do someting with Painted_Point 
	elsif p'Tag = Tall_Point then
		... yadda yadda yadda 
	...

-- Brian





  reply	other threads:[~1999-02-05  0:00 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-02-05  0:00 How to write TYPECASE in Ada 95? Norman Ramsey
1999-02-05  0:00 ` Brian Rogoff [this message]
1999-02-05  0:00   ` David C. Hoos, Sr.
1999-02-05  0:00     ` Brian Rogoff
1999-02-06  0:00   ` Ed Falis
1999-02-06  0:00     ` Nick Roberts
1999-02-06  0:00       ` Nick Roberts
1999-02-17  0:00     ` Tom Moran
1999-02-18  0:00       ` Matthew Heaney
1999-02-18  0:00         ` Tom Moran
1999-02-18  0:00           ` Matthew Heaney
1999-02-18  0:00         ` robert_dewar
1999-02-19  0:00           ` Tom Moran
1999-02-19  0:00           ` Nick Roberts
1999-02-18  0:00         ` Tom Moran
1999-02-19  0:00     ` Tom Moran
1999-02-19  0:00       ` Tom Moran
1999-02-23  0:00       ` Samuel Mize
1999-02-23  0:00         ` Question (was Re: How to write TYPECASE in Ada 95?) Mike Silva
1999-02-24  0:00           ` Samuel T. Harris
1999-02-24  0:00             ` Matthew Heaney
1999-02-24  0:00               ` Tucker Taft
1999-02-24  0:00           ` (long) programming by extension (was: " Samuel Mize
1999-02-24  0:00             ` (long) programming by extension Samuel Mize
1999-02-25  0:00               ` (shorter and new) " Samuel Mize
1999-02-25  0:00                 ` Mike Silva
1999-02-26  0:00                   ` Samuel Mize
1999-02-24  0:00           ` Question (was Re: How to write TYPECASE in Ada 95?) Nick Roberts
1999-02-06  0:00 ` How to write TYPECASE in Ada 95? David C. Hoos, Sr.
1999-02-06  0:00   ` Matthew Heaney
1999-02-06  0:00     ` Matthew Heaney
1999-02-06  0:00     ` Matthew Heaney
1999-02-09  0:00     ` David C. Hoos, Sr.
1999-02-06  0:00 ` Matthew Heaney
replies disabled

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