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.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,b553d2c02a2df59f X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.arcor.de!news.arcor.de!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: limited types (Was: Records that could be arrays) Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.14.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <1cwl2r5h594du$.1q4kglbpb2bma.dlg@40tude.net> <10ovc4gxk6wka.gttjb2v0fbcq$.dlg@40tude.net> <13yslifejxwuq.15rip8gh2aufj.dlg@40tude.net> <44031ace$0$13779$9b4e6d93@newsread4.arcor-online.net> <1i6nwodxgp1bn.voklt7nvcl1g$.dlg@40tude.net> <1141059143.617291.39980@i40g2000cwc.googlegroups.com> <1dd53t0syyc1z.1ety6xoat1ce5$.dlg@40tude.net> <1141081229.680793.223430@j33g2000cwa.googlegroups.com> <9nmzg0hsmfkw$.33czd3g8z0qs.dlg@40tude.net> <1141147475.263018.23440@u72g2000cwu.googlegroups.com> <1141156690.991228.267400@j33g2000cwa.googlegroups.com> Date: Tue, 28 Feb 2006 22:03:37 +0100 Message-ID: NNTP-Posting-Date: 28 Feb 2006 22:03:37 MET NNTP-Posting-Host: 7765b69f.newsread2.arcor-online.net X-Trace: DXC=hVBQ^T\B\`FJ2=Pn8=T1[JQ5U85hF6f;DjW\KbG]kaMHU7^]5?JhlBNLjGF=S\KbWI[6LHn;2LCVN[ On 28 Feb 2006 11:58:11 -0800, Matthew Heaney wrote: > Dmitry A. Kazakov wrote: >> On 28 Feb 2006 09:24:35 -0800, Matthew Heaney wrote: >> >> I still don't see CS. > > I wrote the declaration wrong; it should have been: > > generic > type ET is private; --or: type ET (<>) is limited private; > type CT is private; --cursor type > with function E (C : CT) return ET is <>; > procedure Generic_Algorithm (C1, C2 : CT); > > The cursor pair [C1, C2) describes a range of elements. It might be > the entire range of elements in the container, or just a subrange. The > algorithm doesn't care. But still S <: T does not imply CS <: CT. >> BTW, if I had CS, would need not to instantiate Generic_Algorithm once >> more. > > (I assume "CS" means "container of element type S, and S derives from > type T.") Yes and CS should be a subtype of CT, so that CS could be passed as an "in" where CT is expected. It also could be as an "out", but then with a chance of Constraint_Error at run-time. > As far as generic algorithms are concerned, it doesn't matter that type > S derives from type T. That's what "generic algorithm" means. It means "works on a set of types." Generics are only one [weakest] form of polymorphism. > And yes, you have to instantiate the algorithm twice, since the cursor > types come from different instantiations of some generic container > package. That is the whole point. BTW, you will need to instantiate it more than twice for cross combinations, like when C1 is CS and C2 is CT. It geometrically explodes. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de