From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: A question re meaning/use of the "for ... use ..."
Date: Wed, 8 Dec 2004 13:50:02 -0600
Date: 2004-12-08T13:50:02-06:00 [thread overview]
Message-ID: <vPWdnWxTy-8BxyrcRVn-pQ@megapath.net> (raw)
In-Reply-To: ln8y8932ei.fsf@nuthaus.mib.org
"Keith Thompson" <kst-u@mib.org> wrote in message
news:ln8y8932ei.fsf@nuthaus.mib.org...
> "Randy Brukardt" <randy@rrsoftware.com> writes:
> > "Jeffrey Carter" <spam@spam.com> wrote in message
> > news:H1Hsd.1987$yr1.256@newsread3.news.pas.earthlink.net...
> >> Stephen Leake wrote:
> >>
> >> > There is no standard attribute that returns the internal
> >> > representation specified by the enumeration representation clause.
> >> > However, GNAT provides the non-standard 'Enum_Rep for this purpose.
> >>
> >> I have no problem with 'Pos returning the abstract position number, but
> >> do think something like GNAT's 'Enum_Rep should be standard, along with
> >> a conversion the other way, equivalent to 'Val ('Enum_Val?).
> >
> > The ARG discussed this long ago, and concluded that such a facility
isn't
> > needed. That's because Unchecked_Conversion provides the needed support.
> > Indeed, this is one of the few cases where the result of
> > Unchecked_Conversion is defined by the language (using it in this way
will
> > work on all Ada compilers). There was some discussion about syntax
guides
> > that prohibit the use of Unchecked_Conversion, but there is a lot of
> > discomfort about changing the language just because some people's style
> > guides are broken...
>
> How do you portably choose the target type for the Unchecked_Conversion?
>
> The 'Pos attribute returns a result of type universal_integer; there's
> no way to make an Unchecked_Conversion return a universal_integer.
You have to declare a type for that purpose, but otherwise there is no
problem:
First_Rep : constant := <rep-of-First>;
Last_Rep : constant := <rep-of-Last>;
type Enum is (First, ...., Last);
for Enum use (First => First_Rep, .... Last => Last_Rep);
type Enum_Rep is range First_Rep .. Last_Rep;
for Enum_Rep'Size use Enum'Size;
function To_Rep is new Ada.Unchecked_Conversion (Enum, Enum_Rep);
function From_Rep is new Ada.Unchecked_Conversion (Enum_Rep, Enum);
All of this is portable, and required for any Annex C compliant compiler.
The only loss here is writing a bit of extra text (these declarations, and
type conversions on the results of the functions). This is a rare enough
need that that doesn't seem too bad.
Randy.
next prev parent reply other threads:[~2004-12-08 19:50 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-05 15:27 A question re meaning/use of the "for ... use ..." Erik J Pessers
2004-12-05 15:47 ` Martin Krischik
2004-12-05 15:59 ` Stephen Leake
2004-12-05 16:52 ` Jeffrey Carter
2004-12-06 19:59 ` Randy Brukardt
2004-12-07 1:36 ` Jeffrey Carter
2004-12-07 2:40 ` David C. Hoos, Sr.
2004-12-07 20:59 ` Randy Brukardt
2004-12-08 1:41 ` Jeffrey Carter
2004-12-08 8:40 ` Martin Dowie
2004-12-08 16:23 ` Georg Bauhaus
2004-12-08 3:18 ` Keith Thompson
2004-12-08 13:48 ` David C. Hoos
2004-12-08 19:50 ` Randy Brukardt [this message]
2004-12-08 23:00 ` Keith Thompson
2004-12-09 23:06 ` Randy Brukardt
2004-12-10 2:26 ` Keith Thompson
2004-12-10 19:42 ` Randy Brukardt
2004-12-10 21:18 ` Keith Thompson
2004-12-11 0:53 ` Keith Thompson
2004-12-10 3:13 ` David C. Hoos
2004-12-10 9:23 ` Keith Thompson
2004-12-10 13:24 ` David C. Hoos
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox