comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Controlled types and exception safety
Date: Tue, 6 Dec 2005 10:50:22 +0100
Date: 2005-12-06T10:50:26+01:00	[thread overview]
Message-ID: <3trncoj4t0va.19bs46zhm4xbe.dlg@40tude.net> (raw)
In-Reply-To: dn3jvn$fdg$1@sunnews.cern.ch

On Tue, 06 Dec 2005 10:00:39 +0100, Maciej Sobczak wrote:

> This brings me to the next problem. Let's say that I provide a separate 
> procedure Duplicate or Copy or Assign or whatever with the 
> commit-or-rollback guarantees for some type (like Stack). Now, some of 
> the types in my program will have ":=" for assignment, and some others 
> will have the Copy procedure, but not ":=".
> I want to create a generic container or some other component that will 
> copy things around internally. It has to use ":=" for some types (like 
> Integer) and Copy for others (like Stack).
> In C++ I solve this problem (aside the fact that there is no problem in 
> the first place) with template type traits or some other application of 
> template specializations.
> What about Ada?

generic
   type Object is limited private;
   with procedure Deep_Copy (Left : in out Object; Right : Object) is <>;
package Container is
   ...
end Container;
-------------------------------
with Container;
generic
   type Object is private;
package Specialized_Container is
   procedure Deep_Copy (Left : in out Object; Right : Object);
   pragma Inline (Deep_Copy);
   package Copying_By_Assignment is new Container (Object);   
end Specialized_Container;
-------------------------------
package body Specialized_Container is
   procedure Deep_Copy (Left : in out Object; Right Object) is
   begin
      Left := Right;
   end Deep_Copy;
end Specialized_Container;

Note also that your example is not much realistic. Transaction model is
expensive. One usually does not compose transactions. This means that
components of a container will be copied destructively, *after* necessary
memory allocation. Only the upper level will take care of a possibility to
roll things back. Thus it makes much sense to distinguish light-weight ":="
(which can't fail) and heavy-weight "Copy".

The container itself could be a red-black tree, which supports roll-backs
after mutations.

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



  reply	other threads:[~2005-12-06  9:50 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-30 13:57 Controlled types and exception safety Maciej Sobczak
2005-11-30 15:06 ` Dmitry A. Kazakov
2005-11-30 16:19   ` Maciej Sobczak
2005-12-01  0:05     ` Stephen Leake
2005-12-01  9:21     ` Dmitry A. Kazakov
2005-12-01 10:46       ` Maciej Sobczak
2005-12-01 15:08         ` Dmitry A. Kazakov
2005-12-02  4:17           ` Randy Brukardt
2005-12-02  9:29             ` Maciej Sobczak
2005-12-02 18:12               ` tmoran
2005-12-02 19:15                 ` Robert A Duff
2005-12-02 21:42                   ` tmoran
2005-12-06  9:00                     ` Maciej Sobczak
2005-12-06  9:50                       ` Dmitry A. Kazakov [this message]
2005-12-06 18:34                         ` Jeffrey R. Carter
2005-12-06 19:34                           ` Randy Brukardt
2005-12-06 21:20                             ` Dmitry A. Kazakov
2005-12-07  1:57                             ` Jeffrey R. Carter
2005-12-08  0:50                               ` Randy Brukardt
2005-12-08 19:37                                 ` Jeffrey R. Carter
2005-12-09  2:36                                   ` Randy Brukardt
2005-12-09  6:33                                     ` Jeffrey R. Carter
2005-12-09 20:35                                       ` Randy Brukardt
2005-12-10  7:53                                         ` Jeffrey R. Carter
2005-12-06 20:43                           ` Dmitry A. Kazakov
2005-12-07  2:00                             ` Jeffrey R. Carter
2005-12-07 10:01                               ` Dmitry A. Kazakov
2005-12-02 23:21             ` Robert A Duff
2005-11-30 17:46 ` Jean-Pierre Rosen
2005-11-30 21:02 ` Jeffrey R. Carter
2005-11-30 22:06   ` Björn Persson
2005-11-30 23:52     ` Randy Brukardt
2005-12-01  5:26     ` Jeffrey R. Carter
2005-12-02 23:51       ` Robert A Duff
2005-12-06 11:41   ` Peter C. Chapin
2005-12-06 12:50     ` Jean-Pierre Rosen
2005-12-06 13:06     ` 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