comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: APQ
Date: Wed, 22 Dec 2004 10:14:45 +0100
Date: 2004-12-22T10:14:45+01:00	[thread overview]
Message-ID: <zj01txsolhws$.1l49jvgadzcgz$.dlg@40tude.net> (raw)
In-Reply-To: sa4sm5zmds2.fsf@snoopy.apana.org.au

On Wed, 22 Dec 2004 10:29:01 +1100, Brian May wrote:

>>>>>> "Dmitry" == Dmitry A Kazakov <mailbox@dmitry-kazakov.de> writes:

>     Dmitry> function Copy (C : Root_Connection_Type)
>     Dmitry> return Root_Connection_Ptr is abstract;
> 
>     Dmitry> This would allocate a copy and connect it to the same
>     Dmitry> DB. Because reference counting is intended you will need
>     Dmitry> dynamic allocation anyway. The user will of course do it
>     Dmitry> all with handles:
> 
> I have a suspicion this would not work as Root_Connection_Type is a
> limited type. Or am I yet again mistaken?

You probably mean this:

   function Copy (C : Root_Connection_Type'Class)
      return Root_Connection_Ptr is
   begin
      return new Root_Connection_Type'Class'(C);
   end Copy;

This indeed cannot work for limited types. This was the reason why Copy was
declared abstract primitive instead:

   function Copy (C : Root_Connection_Type)
      return Root_Connection_Ptr is abstract;

It will dispatch to an implementation which knows how to copy itself:

   function Copy (C : My_Connection_Type)
      return Root_Connection_Ptr is
      Result : Root_Connection_Ptr := new My_Connection_Type;
      Object : My_Connection_Type renames My_Connection_Type (Result.all);
   begin
      Object.Field_Foo := C.Field_Foo;
      ... -- Clone me tender
      return Result;
   exception
      when others =>
         Free (Result); -- No memory leaks!
         raise;
   end Copy;

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2004-12-22  9:14 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-15 23:31 APQ Brian May
2004-12-16 11:34 ` APQ Warren W. Gay VE3WWG
2004-12-16 23:58   ` APQ Randy Brukardt
2004-12-17  3:45     ` APQ Brian May
2004-12-17  4:03       ` APQ Warren W. Gay VE3WWG
2004-12-17  4:38         ` APQ Brian May
2004-12-17  9:06           ` APQ Egil H. H�vik
2004-12-17 11:42             ` APQ Brian May
2004-12-17 22:55               ` APQ Brian May
2004-12-18 15:52                 ` APQ Warren W. Gay VE3WWG
2004-12-18 18:23                   ` APQ Dmitry A. Kazakov
2004-12-21 23:34                     ` APQ Brian May
2004-12-22  8:57                       ` APQ Dmitry A. Kazakov
2004-12-22 10:07                   ` APQ Martin Krischik
2004-12-22 13:15                     ` APQ Dmitry A. Kazakov
2004-12-22 16:53                       ` APQ Martin Krischik
2004-12-22 17:21                         ` APQ Dmitry A. Kazakov
2004-12-22 18:23                           ` APQ Martin Krischik
2004-12-17  8:59       ` APQ Stephen Leake
2004-12-17 14:12       ` APQ Dmitry A. Kazakov
2004-12-17 23:20         ` APQ Brian May
2004-12-18 16:13           ` APQ Dmitry A. Kazakov
2004-12-21 23:29         ` APQ Brian May
2004-12-22  9:14           ` Dmitry A. Kazakov [this message]
2005-01-04 21:32             ` APQ Brian May
2005-01-05 11:58               ` APQ Dmitry A. Kazakov
2004-12-23 17:04           ` APQ (Connection Cloning) Warren W. Gay VE3WWG
2004-12-23 17:55             ` Georg Bauhaus
2004-12-23 18:52               ` Warren W. Gay VE3WWG
2005-01-03  7:40                 ` Frank Piron
2004-12-17 13:54 ` APQ Dmitry A. Kazakov
  -- strict thread matches above, loose matches on Subject: below --
2004-12-16  4:37 APQ Christoph Karl Walter Grein
replies disabled

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