comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Constants instead of enum?
Date: Wed, 18 Dec 2002 17:52:03 GMT
Date: 2002-12-18T17:52:03+00:00	[thread overview]
Message-ID: <wccel8fz03g.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 5ad0dd8a.0212180703.71f5b6b7@posting.google.com

wojtek@power.com.pl (Wojtek Narczynski) writes:

> Hello,
> 
> I have the following situation: I read request record from network, an
> Unsigned_8 (byte) denotes its type. Valid types are 1..10. Response
> record has the same structure as request record. I also want to reuse
> the memory allocated for request as the response. Now problem: for
> every unimplemented request type (outside 1..10 range) I am supposed
> to send a response record with type 11 back.
> 
> I am trying to use enumeration with representation clause for this,
> but it just doesn't work.

Correct -- it doesn't work.

>... I read an Unsigned_8 from network, and all
> its values are valid and should be handled gracefully, so I cannot use
> this enum in the request structure. Because of this I have to convert
> from Unsigned_8 to enumeration, but only sometimes. Then I have to use
> unchecked conversion to get the enumeration's underlying Unsigned_8 to
> store it in the response record (same structure and memory) as
> request, so it has to be Unsigned_8.
> 
> If I defined types as constants for 1..11 range the amount of code
> necessary and conversions will reduce.
> 
> So my question is - would this be fine to use a group of consts in
> this specific case instead of an enum? I could encapsulate them into a
> nested package.

This would be fine.  In fact, it is superior to the enum-with-rep-clause
solution, for the reasons you stated.

In fact, I would go so far as to say enum rep clauses are rarely useful,
and should not be in the language.  Use enums when you don't care about
the representation.  If you care about representation, use types that
exactly match the hardware or whatever you're interfacing to, and use
constants (perhaps deferred constants) to define enum-like values.

- Bob



      parent reply	other threads:[~2002-12-18 17:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-18 15:03 Constants instead of enum? Wojtek Narczynski
2002-12-18 16:36 ` John McCabe
2002-12-18 17:52 ` Robert A Duff [this message]
replies disabled

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