comp.lang.ada
 help / color / mirror / Atom feed
From: Keith Thompson <kst-u@mib.org>
Subject: Re: A question re meaning/use of the "for ... use ..."
Date: Wed, 08 Dec 2004 23:00:08 GMT
Date: 2004-12-08T23:00:08+00:00	[thread overview]
Message-ID: <lnmzwoh01r.fsf@nuthaus.mib.org> (raw)
In-Reply-To: vPWdnWxTy-8BxyrcRVn-pQ@megapath.net

"Randy Brukardt" <randy@rrsoftware.com> writes:
> "Keith Thompson" <kst-u@mib.org> wrote in message
> news:ln8y8932ei.fsf@nuthaus.mib.org...
[...]
>> 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.

That's fine if the author of the code that declares the type Enum has
also bothered to declare the type Enum_Rep (and has done so
correctly).

But suppose I'm using some third-party package that declares an
enumeration type.  I have no control over the coding of the package.
The type may or may not have a representation clause; if it doesn't,
it may in the next version.  As a client of the package, I don't have
enough information to declare the type Enum_Rep myself.

It would also be nice to have an operation like From_Rep that raises
Constraint_Error if I call it with an invalid value.

The language could have made this easier, and made enumeration
representation clauses more useful.  In my opinion, it went to far in
trying to hide representation details from the user.

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
San Diego Supercomputer Center             <*>  <http://users.sdsc.edu/~kst>
We must do something.  This is something.  Therefore, we must do this.



  reply	other threads:[~2004-12-08 23:00 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
2004-12-08 23:00           ` Keith Thompson [this message]
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