comp.lang.ada
 help / color / mirror / Atom feed
From: brangdon@cix.co.uk (Dave Harris)
Subject: Re: Merits of re-dispatching [LONG]
Date: Sat, 16 Feb 2002 12:10 +0000 (GMT Standard Time)
Date: 2002-02-16T12:10:00+00:00	[thread overview]
Message-ID: <memo.20020216121052.11581C@brangdon.madasafish.com> (raw)
In-Reply-To: 3c6bcb27.4632484@News.CIS.DFN.DE

dmitry@elros.cbb-automation.de (Dmitry A. Kazakov) wrote (abridged):
> That there are three types changes nothing. It works pretty well in
> Ada 95:

That still doesn't capture the full complexity, because although you have 
Foo you don't have a Call_Foo. The call to Foo from within Call_Foo must 
be dispatching, because it must dispatch to different places. Given that 
it can do this, it's simplest to say the call to Foo from within the 
destructor is dispatching too, in the same way. So there is no 
non-dispatching call in the C++.

I don't know Ada, but I think it would look like:

 type A is ...
 procedure Foo (Object : A) is
 begin
    Put_Line ("A.Foo");
 end Foo;
 procedure Call_Foo (Object : A) is
 begin
    Foo( Object );  -- Dispatching, A.Foo or B.Foo called.
 end Foo;
 procedure Finalize (Object : in out A) is
 begin
    Call_Foo (Object);
    Foo (Object);
 end Finalize;

 type B is new A ...
 procedure Foo (Object : B) is
 begin
    Put_Line ("B.Foo");
 end Foo;
 procedure Finalize (Object : in out B) is
 begin
    Call_Foo (Object); 
    Foo( Object );
    Finalize (A (Object));
 end Finalize;

This should produce B.Foo B.Foo A.Foo A.Foo. The call to Foo from 
B.Finalize can use exactly the same implementation as the call to Foo from 
A.Call_Foo. Both end up in B.Foo when the object is of type B. Both are 
dispatching calls.

  Dave Harris, Nottingham, UK | "Weave a circle round him thrice,
      brangdon@cix.co.uk      |   And close your eyes with holy dread,
                              |  For he on honey dew hath fed
 http://www.bhresearch.co.uk/ |   And drunk the milk of Paradise."



  reply	other threads:[~2002-02-16 12:10 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-07 10:26 Merits of re-dispatching [LONG] Dmitry A. Kazakov
2002-02-07 15:03 ` Hyman Rosen
2002-02-08  1:29   ` Matthew Heaney
2002-02-08  9:16     ` Dmitry A. Kazakov
2002-02-08 18:30       ` Hyman Rosen
2002-02-09  0:10         ` Matthew Heaney
2002-02-12  8:32         ` Dmitry A. Kazakov
2002-02-12 21:37           ` Hyman Rosen
2002-02-13  9:29             ` Dmitry A. Kazakov
2002-02-13 14:32               ` Hyman Rosen
2002-02-13 19:58           ` Dave Harris
2002-02-14 15:06             ` Dmitry A. Kazakov
2002-02-16 12:10               ` Dave Harris [this message]
2002-02-18  8:57                 ` Dmitry A. Kazakov
2002-02-18 19:47                   ` Merits of re-dispatching Dave Harris
2002-02-19  9:20                     ` Dmitry A. Kazakov
2002-02-21  5:49                       ` Hyman Rosen
2002-02-21  9:04                         ` Dmitry A. Kazakov
2002-02-21 18:17                           ` Hyman Rosen
2002-02-22  9:21                             ` Dmitry A. Kazakov
2002-02-22 16:59                               ` Hyman Rosen
2002-02-25  8:51                                 ` Dmitry A. Kazakov
2002-02-08 23:51       ` Merits of re-dispatching [LONG] Matthew Heaney
2002-02-12  9:02         ` Dmitry A. Kazakov
2002-02-07 23:40 ` Nick Roberts
2002-02-08  8:56   ` Dmitry A. Kazakov
2002-02-08  1:06 ` Matthew Heaney
2002-02-08  9:48   ` Dmitry A. Kazakov
2002-02-09  0:16     ` Matthew Heaney
2002-02-08 18:10   ` Hyman Rosen
2002-02-09  0:41     ` Matthew Heaney
2002-02-08 18:33 ` Nick Roberts
2002-02-09  4:07   ` Nick Roberts
2002-02-12 10:13   ` Dmitry A. Kazakov
2002-02-14 20:57 ` Tucker Taft
2002-02-15 15:43   ` Dmitry A. Kazakov
replies disabled

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