From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ca9eef4d5e2078ea X-Google-Attributes: gid103376,public From: Ken Garlington Subject: Re: Beware: Rep spec on an enumeration type causes code explosion Date: 1997/12/11 Message-ID: <3490B7B1.711A@nospam.flash.net>#1/1 X-Deja-AN: 297443810 References: <348F3DFC.10DB@nospam.flash.net> <3490252D.6B550F17@ac3i.dseg.ti.com> Organization: Flashnet Communications, http://www.flash.net Reply-To: Ken.Garlington@nospam.computer.org Newsgroups: comp.lang.ada Date: 1997-12-11T00:00:00+00:00 List-Id: John G. Volan wrote: > > Ken Garlington wrote: > > > > One of the nice things about "holey" representations in Ada, when used > > for > > interfacing to external systems, is the use of 'Valid to check for valid > > input > > data in a very readable manner. However, I would convert the raw input > > to a non-holey type after the check, using either a map or case > > statement > > (depending upon the compiler). > > There is no need for anything so elaborate. Just derive a holey > enumeration type from a contiguous enumeration type. Then you can simply > use ordinary Ada type-conversions, and the compiler will implicitly do > the mapping for you: > > with Ada.Text_IO; > procedure Holey_Enum_Demo is > > type Contiguous_Type is (A, B, C, D, E); > -- *no* rep spec! > > type Holey_Type is new Contiguous_Type; > for Holey_Type use (A => 1, B => 2, C => 4, D => 8, E => 16); > > Contiguous : Contiguous_Type := A; > Holey : Holey_Type := B; > > begin > > Contiguous := Contiguous_Type (Holey); > -- implicitly does equivalent of 'Pos > > Holey := Holey_Type (Contiguous); > -- implicitly does equivalent of 'Val > > end Holey_Enum_Demo; This assumes Holey will always be one of A, B, C, D, E. What happens when the underlying I/O device returns a value of 6 for Holey? > > My feeling is that "holey" enumeration types (like other Chapter 13 > features) should really only be used at the "edges" of a program, > wherever you're immediately reading from or writing to some external > system that is expecting a certain data format. Contiguous enumeration > types should be used internally everywhere else in your program, for all > the efficiency reasons that have been ... enumerated :-) ... in this > thread. Luckily, Ada provides this convenient way of converting between > holey and contiguous representations. > > -- > Internet.Usenet.Put_Signature > (Name => "John G. Volan", > Employer => "Raytheon/TI Advanced C3I Systems, San Jose, CA", > Work_Email => "jvolan@ti.com", > Home_Email => "johnvolan@sprintmail.com", > Slogan => "Ada95: World's *FIRST* International-Standard OOPL", > Disclaimer => "My employer never defined these opinions, so using " & > "them would be totally erroneous...or is that just " & > "nondeterministic behavior now? :-) ");