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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,bc1361a952ec75ca X-Google-Attributes: gid103376,public X-Google-Thread: 109fba,582dff0b3f065a52 X-Google-Attributes: gid109fba,public X-Google-Thread: 1014db,582dff0b3f065a52 X-Google-Attributes: gid1014db,public X-Google-ArrivalTime: 2001-08-14 09:15:16 PST Path: archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.direct.ca!look.ca!news1.tor.metronet.ca!nnrp1.tor.metronet.ca!not-for-mail Message-ID: <3B794E8E.BD8158F4@home.com> From: "Warren W. Gay VE3WWG" X-Mailer: Mozilla 4.75 [en] (Windows NT 5.0; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++ Subject: Re: How Ada could have prevented the Red Code distributed denial of service attack. References: <3b690498.1111845720@news.worldonline.nl> <9kbu15$9bj@augusta.math.psu.edu> <9kbvsr$a02@augusta.math.psu.edu> <3B69DB35.4412459E@home.com> <3B6F312F.DA4E178E@home.com> <23lok9.ioi.ln@10.0.0.2> <3B70AB15.35845A98@home.com> <3B721FF5.B7D854F6@home.com> <9lb6h4$6e9$1@norfair.nerim.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Tue, 14 Aug 2001 16:15:12 GMT NNTP-Posting-Host: 198.96.47.195 NNTP-Posting-Date: Tue, 14 Aug 2001 10:15:12 MDT Organization: MetroNet Communications Group Inc. Xref: archiver1.google.com comp.lang.ada:11924 comp.lang.c:74183 comp.lang.c++:82500 Date: 2001-08-14T16:15:12+00:00 List-Id: Bertrand Augereau wrote: > > type Colour is ( Red, Green, Blue ); > > > > Background : Colour := Red; > > > > ... > > begin > > -- Debug : > > Put_Line("Background = " & Colour'Image(Background)); > > > > One Put_Line statement using the Colour'Image() attribute allows me to > > conveniently print out the value of the enumerated type in human > > readable terms. To do this in C++, you'd either choose between printing > > the "integer" value of it, and going back to the include/declaration to > > figure out what it was, _or_ you'd have to do: > > > > static char str_colours[] = { "red", "green", "blue" }; > > enum { red, green, blue } colour; > > colour c = blue; > > > > printf("colour = %s\n",str_colours[c]); > > > > ... which only works if your enums start from zero. Otherwise, you > additionally > > have to map it : > > > > static char str_colours[] = { "red", "green", "blue" }; > > enum { red=100, green=200, blue=300 } colour; > > colour c = blue; > > > > // the following is hopeless, and won't work : > > printf("colour = %s\n",str_colours[c]); > > > > before you object to that, let me add that enums are used with all > > sorts of weird values -- not all of them start from zero. In fact, if > > they all did, you'd have a harder time detecting runtime errors due to > > mismatched use of enums. I purposely choose different starting values > > for C/C++ enums for that reason. > > With templates, you can evaluate this mapping at compile time, > enum A {a=12,b=38,c=95}; > > template const char* GetImage (void); > template<> const char* GetImage (void) { return "a"; } > template<> const char* GetImage (void) { return "b"; } > template<> const char* GetImage (void) { return "c"; } > > And with the help of the preprocessor, you might get even more terse syntax. > But you Ada programmers like it verbose, don't you ;-) > > I didn't want to state that this is superior to Ada 'Image approach, which > is quite useful for quick hacks and debugging purpose, but I guess you > underevaluate the true power of C++ (especially in metaprogramming) Well, that's not bad, but compared to Ada, it still appears rather clumsy. Especially if you had 100++ items in the enumerated set, it becomes a _lot_ more clumsy ;-) -- Warren W. Gay VE3WWG http://members.home.net/ve3wwg