From: EGarrulo <egarrulo@gmail.com>
Subject: Re: Running a preprocessor from GPS?
Date: Fri, 31 Jul 2015 06:50:58 -0700 (PDT)
Date: 2015-07-31T06:50:58-07:00 [thread overview]
Message-ID: <80c91140-1bdc-49eb-ad93-04ba1c5241a2@googlegroups.com> (raw)
In-Reply-To: <1ktkfm2fakx3h.28azibg1gr7y.dlg@40tude.net>
On Friday, July 31, 2015 at 1:02:03 PM UTC+2, Dmitry A. Kazakov wrote:
> > Apparently, the next version
> > of GNATCOLL will include an alternative implementation[1] that removes this
> > requirement. But this means that right now there is GNATCOLL.Refcount only.
>
> That will add a level of indirection as some other implementations do. I
> don't see much merits doing this. There are no cases you might wish to have
> another type as the base and furthermore it won't do any good anyway.
I don't understand what you mean. A common case is when you have an existing
class that wraps a resource and thus you can't change its base class.
Therefore the only general solution is to use composition, not inheritance, for
reference counting; like this, for example:
generic
type T is private;
package Shared_Accesses is
type Shared_Object is record
Reference_Count : Natural;
Object : T;
end record;
type Shared_Object_Access is access Shared_Object;
type Shared_Access is
-- Implementation of a controlled type that holds a Shared_Object_Access.
end;
end Shared_Accesses;
> Because the only usable pattern of using strong pointers is this:
>
> type Object_Interface is interface;
> -- define operations here
> procedure Foo (X : in out Object_Interface) is abstract;
>
> in private
> type Object_Implementation is
> new Reference_Counted and Object_Interface with ...
> -- implement operations here
> overriding procedure Foo (X : in out Object_Implementation);
>
> in public
> type Object is new Object_Interface with private;
> -- implement operations here
> overriding procedure Foo (X : in out Object);
>
> in private
> type Object_Implementation_Ptr is access Object_Implementation'Class;
>
> type Object is new Strong_Reference with record
> Ptr : Object_Implementation_Ptr;
> end record;
>
> The implementation of Object's Foo delegates:
>
> procedure Foo (X : in out Object) is
> begin
> X.Ptr.Foo;
> end Foo;
>
> If Object_Implementation must use some existing type, aggregate it. That
> won't change anything, because public clients won't see
> Object_Implementation anyway. Who cares what was the parent type of?
I can't follow what the code does, sorry. What would be the equivalent of this
C++ code:
std::shared_ptr<Object> shared_object (new Object);
in the above example? Thanks.
next prev parent reply other threads:[~2015-07-31 13:50 UTC|newest]
Thread overview: 175+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-27 14:28 Running a preprocessor from GPS? EGarrulo
2015-07-27 16:47 ` David Botton
2015-07-27 17:17 ` EGarrulo
2015-07-27 20:26 ` Randy Brukardt
2015-07-27 21:14 ` Jeffrey R. Carter
2015-07-27 22:23 ` EGarrulo
2015-07-28 7:23 ` Simon Wright
2015-07-28 11:36 ` EGarrulo
2015-07-28 21:12 ` Randy Brukardt
2015-07-28 22:11 ` EGarrulo
2015-07-28 22:41 ` EGarrulo
2015-07-29 9:52 ` G.B.
2015-07-29 20:32 ` Randy Brukardt
2015-07-29 22:32 ` EGarrulo
2015-07-29 23:51 ` Jeffrey R. Carter
2015-07-30 0:10 ` EGarrulo
2015-07-30 6:01 ` Niklas Holsti
2015-07-30 7:33 ` Björn Lundin
2015-07-30 8:03 ` EGarrulo
2015-07-30 8:08 ` Jacob Sparre Andersen
2015-07-30 8:37 ` EGarrulo
2015-07-30 8:49 ` Georg Bauhaus
2015-07-30 12:15 ` EGarrulo
2015-07-30 14:11 ` G.B.
2015-07-30 19:29 ` Jeffrey R. Carter
2015-07-30 20:53 ` EGarrulo
2015-07-30 22:52 ` Jeffrey R. Carter
2015-07-31 7:29 ` Georg Bauhaus
2015-07-31 7:53 ` gautier_niouzes
2015-07-31 8:26 ` Simon Wright
2015-07-31 9:13 ` Dmitry A. Kazakov
2015-07-31 9:31 ` EGarrulo
2015-07-31 11:01 ` Dmitry A. Kazakov
2015-07-31 13:50 ` EGarrulo [this message]
2015-07-31 16:29 ` Dmitry A. Kazakov
2015-07-31 11:26 ` Brian Drummond
2015-07-31 12:12 ` EGarrulo
2015-07-31 12:15 ` EGarrulo
2015-07-31 17:54 ` Jeffrey R. Carter
2015-07-31 18:20 ` EGarrulo
2015-07-31 18:51 ` Jeffrey R. Carter
2015-08-01 7:20 ` Simon Wright
2015-08-01 8:06 ` EGarrulo
2015-08-01 8:33 ` Simon Wright
2015-08-01 10:47 ` EGarrulo
2015-08-01 11:27 ` Simon Wright
2015-08-01 11:44 ` Niklas Holsti
2015-08-01 12:19 ` EGarrulo
2015-08-01 17:49 ` Jeffrey R. Carter
2015-08-01 18:15 ` Paul Rubin
2015-08-01 18:59 ` Jeffrey R. Carter
2015-08-01 20:30 ` Georg Bauhaus
2015-08-01 20:44 ` EGarrulo
2015-08-01 22:44 ` Jeffrey R. Carter
2015-08-01 23:39 ` EGarrulo
2015-08-02 0:02 ` Jeffrey R. Carter
2015-08-02 0:18 ` EGarrulo
2015-08-02 0:30 ` EGarrulo
2015-08-02 6:05 ` Jeffrey R. Carter
2015-08-02 8:29 ` EGarrulo
2015-08-02 19:21 ` Jeffrey R. Carter
2015-08-02 21:37 ` EGarrulo
2015-08-03 2:35 ` Jeffrey R. Carter
2015-08-02 2:53 ` Paul Rubin
2015-08-02 6:07 ` Jeffrey R. Carter
2015-08-02 8:36 ` EGarrulo
2015-08-01 16:53 ` Jeffrey R. Carter
2015-08-01 17:00 ` Jeffrey R. Carter
2015-08-01 7:48 ` Dmitry A. Kazakov
2015-07-30 8:23 ` Georg Bauhaus
2015-07-30 8:45 ` EGarrulo
2015-07-30 9:19 ` Dmitry A. Kazakov
2015-07-30 11:22 ` Niklas Holsti
2015-07-30 13:00 ` EGarrulo
2015-07-30 13:30 ` Dmitry A. Kazakov
2015-07-30 13:51 ` EGarrulo
2015-07-30 14:13 ` Dmitry A. Kazakov
2015-07-30 14:46 ` Simon Wright
2015-07-30 14:31 ` G.B.
2015-07-30 18:46 ` Randy Brukardt
2015-07-30 9:18 ` EGarrulo
2015-07-30 18:55 ` Randy Brukardt
2015-07-30 19:32 ` EGarrulo
2015-07-31 0:10 ` Randy Brukardt
2015-07-30 11:35 ` Brian Drummond
2015-07-30 13:30 ` EGarrulo
2015-07-31 11:07 ` Brian Drummond
2015-07-30 8:28 ` Pascal Obry
2015-07-30 12:00 ` EGarrulo
2015-07-30 10:01 ` Björn Lundin
2015-07-30 10:59 ` Pascal Obry
2015-07-30 11:21 ` gautier_niouzes
2015-07-30 18:35 ` Randy Brukardt
2015-07-31 15:21 ` Stefan.Lucks
2015-07-31 17:28 ` Pascal Obry
2015-08-01 11:38 ` Björn Lundin
2015-08-01 20:07 ` Stefan.Lucks
2015-08-03 23:26 ` Randy Brukardt
2015-07-30 6:08 ` Dmitry A. Kazakov
2015-07-30 6:37 ` Georg Bauhaus
2015-07-30 8:27 ` Pascal Obry
2015-07-30 9:22 ` Dmitry A. Kazakov
2015-07-30 11:51 ` EGarrulo
2015-07-30 12:23 ` Dmitry A. Kazakov
2015-07-30 13:55 ` Niklas Holsti
2015-08-30 7:03 ` David Thompson
2015-07-30 14:07 ` EGarrulo
2015-07-30 18:12 ` Jeffrey R. Carter
2015-07-30 18:51 ` EGarrulo
2015-07-30 19:27 ` Jeffrey R. Carter
2015-07-30 19:54 ` EGarrulo
2015-07-30 22:53 ` Jeffrey R. Carter
2015-07-30 23:58 ` Randy Brukardt
2015-07-30 11:54 ` EGarrulo
2015-07-30 12:42 ` Pascal Obry
2015-07-30 13:21 ` EGarrulo
2015-07-30 13:38 ` Dmitry A. Kazakov
2015-07-30 13:55 ` EGarrulo
2015-07-30 15:23 ` Niklas Holsti
2015-07-30 19:32 ` Randy Brukardt
2015-07-30 20:10 ` EGarrulo
2015-07-31 0:23 ` Randy Brukardt
2015-07-31 6:29 ` Dmitry A. Kazakov
2015-08-02 10:08 ` EGarrulo
2015-08-02 12:15 ` EGarrulo
2015-07-29 23:45 ` EGarrulo
2015-07-30 0:25 ` Jeffrey R. Carter
2015-07-30 8:12 ` EGarrulo
2015-07-30 18:01 ` Jeffrey R. Carter
2015-07-29 6:46 ` Simon Wright
2015-07-29 7:17 ` Dmitry A. Kazakov
2015-07-29 19:57 ` Randy Brukardt
2015-07-29 20:09 ` Jeffrey R. Carter
2015-07-30 18:16 ` Randy Brukardt
2015-07-29 20:38 ` Simon Wright
2015-07-30 7:50 ` Jacob Sparre Andersen
2015-07-30 14:48 ` G.B.
2015-07-30 15:58 ` Simon Wright
2015-07-30 15:13 ` EGarrulo
2015-07-30 15:21 ` EGarrulo
2015-07-30 15:29 ` G.B.
2015-07-30 16:02 ` Simon Wright
2015-07-30 16:15 ` Simon Wright
2015-07-30 16:29 ` EGarrulo
2015-07-30 17:31 ` Simon Wright
2015-07-28 10:28 ` Brian Drummond
2015-07-28 11:39 ` EGarrulo
2015-07-29 10:02 ` Brian Drummond
2015-07-29 10:29 ` Brian Drummond
2015-07-29 12:00 ` EGarrulo
2015-07-29 19:23 ` gautier_niouzes
2015-07-28 11:43 ` Björn Lundin
2015-07-28 11:51 ` Dmitry A. Kazakov
2015-07-28 12:06 ` EGarrulo
2015-07-28 12:54 ` Dmitry A. Kazakov
2015-07-28 13:18 ` EGarrulo
2015-07-28 13:49 ` EGarrulo
2015-07-28 14:02 ` Bob Duff
2015-07-28 14:57 ` G.B.
2015-07-28 15:36 ` Dmitry A. Kazakov
2015-07-29 7:15 ` Stefan.Lucks
2015-07-29 7:52 ` EGarrulo
2015-07-29 17:30 ` Stefan.Lucks
2015-07-29 18:49 ` Jeffrey R. Carter
2015-07-29 20:40 ` Randy Brukardt
2015-07-30 7:40 ` gautier_niouzes
2015-07-30 19:22 ` Randy Brukardt
2015-07-28 13:06 ` G.B.
2015-07-28 13:19 ` EGarrulo
2015-07-28 20:55 ` Randy Brukardt
2015-07-28 22:31 ` EGarrulo
2015-07-29 20:09 ` Randy Brukardt
2015-07-29 22:40 ` EGarrulo
2015-07-28 12:07 ` Björn Lundin
2015-07-31 19:44 ` Per Sandberg
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox