From: "Beard, Frank" <beardf@spawar.navy.mil>
To: "'comp.lang.ada@ada.eu.org'" <comp.lang.ada@ada.eu.org>
Subject: RE: accesing internal codes used for an enumeration
Date: Mon, 7 May 2001 14:53:20 -0400
Date: 2001-05-07T14:53:20-04:00 [thread overview]
Message-ID: <mailman.989261706.30667.comp.lang.ada@ada.eu.org> (raw)
I'm not sure where it is, other than the description of enumerated
types. Since enumerated types map to an underlying integer
representation, your Uncheck_Conversion will be from the enumerated
type to an integer type (defined large enough to hold the all the
possible numbers). If you wanted to be lazy, you could take the
basic Standard Integer (-2**32-1 .. (2**32-1) - 1).
In which case, you would have the following:
type Names is (Ping, Pong);
for Names use (Ping => 123, Pong => 456);
function To_Integer is new
Ada.Unchecked_Conversion(Source => Names,
Target => integer);
name : Names := Names'first;
x : integer := 0;
begin
x := To_Integer(name); -- x is now 123
Hope this helps.
Frank
-----Original Message-----
From: Marius Amado Alves [mailto:alves@systran.lu]
Sent: Monday, May 07, 2001 12:03 PM
To: comp.lang.ada@ada.eu.org
Subject: accesing internal codes used for an enumeration
I am trying to implement a lexicon (in the database sense) as an
enumeration with a representation clause.
Example lexicon:
Name <-> Code
-------------
Ping 123
Pong 456
Implementation:
type Names is (Ping, Pong);
for Names use (Ping => 123, Pong => 456);
I found out the hardway that attribute Pos does not return the internal
code. The ARM says this at 13.4(11), and tells you to use
Unchecked_Conversion instead--but does not instruct you on the types of
the conversion. Where might one learn that? Thanks.
/* The point of a lexicon is to access its elements by either key. I
expect the implementation above would be eficient. It is already simple
to declare/define. The alternative is of course to use arrays, but then a
search procedure is needed. I also wanted to avoid this complication. */
--
Marius Amado Alves
alves@systran.lu
Project Tradaut-Pt
Systran Luxembourg
12, Rue de Vianden
L-2680 LUXEMBOURG
Tel 352 + 45 46 53
Fax 352 + 45 74 75
Mob 351 +939354002
_______________________________________________
comp.lang.ada mailing list
comp.lang.ada@ada.eu.org
http://ada.eu.org/mailman/listinfo/comp.lang.ada
next reply other threads:[~2001-05-07 18:53 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-07 18:53 Beard, Frank [this message]
2001-05-08 5:56 ` accesing internal codes used for an enumeration Jacob Sparre Andersen
-- strict thread matches above, loose matches on Subject: below --
2001-05-10 18:45 Beard, Frank
[not found] <Pine.LNX.4.21.0105071543050.9145-100000@lux38>
2001-05-07 21:18 ` Marius Amado Alves
2001-05-07 16:03 Marius Amado Alves
2001-05-07 15:33 ` Jacob Sparre Andersen
2001-05-07 15:54 ` Ted Dennison
2001-05-08 3:51 ` Marc A. Criley
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox