comp.lang.ada
 help / color / mirror / Atom feed
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




             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