From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: The "()" operator revisited.
Date: 16 Jan 2004 11:14:49 -0500
Date: 2004-01-16T11:14:49-05:00 [thread overview]
Message-ID: <wccsmifj2fa.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: F4SNb.1$%w2.0@nwrdny03.gnilink.net
"Frank J. Lhota" <NOSPAM.lhota.adarose@verizon.net> writes:
> You can get access to both sides of an assignment in Ada 95, using a variant
> of the Rosen trick.
I don't see how this trick can work. By the time Adjust gets called,
the (old) value of the lhs has been destroyed.
Suppose you have a controlled type containing a pointer to
heap-allocated data. You want ":=" to copy the data.
But if the lhs happens to be the right size, you want to reuse that space,
rather than deallocating it and allocating a new heap object.
I don't know how to do that in Ada, and I don't see how the trick
below helps.
>... The idea is to add a component to the controlled object
> that holds an access value for the object itself, e.g.
>
> type My_Controlled_Access is access all My_Controlled_Type;
>
> type My_Controlled_Type is new Ada.Finalization.Controlled with
> record
> Self : My_Controlled_Access; -- Always accesses the containing
> object.
> ...
> end record;
>
> procedure Initialize(Object : in out My_Controlled_Type) is
> begin
> Object.Self := Object'Access;
That's illegal; you need 'Unchecked_Access.
- Bob
next prev parent reply other threads:[~2004-01-16 16:14 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-12 17:53 The "()" operator revisited Frank J. Lhota
2004-01-12 18:38 ` Frank J. Lhota
2004-01-12 22:26 ` Robert A Duff
2004-01-13 16:29 ` Frank J. Lhota
2004-01-13 9:24 ` Dmitry A. Kazakov
2004-01-13 16:44 ` Frank J. Lhota
2004-01-13 17:13 ` Hyman Rosen
2004-01-13 22:27 ` Randy Brukardt
2004-01-14 2:30 ` Stephen Leake
2004-01-14 9:04 ` Dmitry A. Kazakov
2004-01-17 0:15 ` Kenneth Almquist
2004-01-17 21:15 ` Robert A Duff
2004-01-19 10:25 ` Dmitry A. Kazakov
2004-01-13 13:13 ` Marin David Condic
2004-01-13 17:38 ` Warren W. Gay VE3WWG
2004-01-13 19:09 ` Robert A Duff
2004-01-15 17:30 ` Warren W. Gay VE3WWG
2004-01-15 18:11 ` Robert A Duff
2004-01-15 19:36 ` tmoran
2004-01-15 20:35 ` Robert A Duff
2004-01-17 5:48 ` Robert I. Eachus
2004-01-16 1:52 ` Redefining := (was: The "()" operator revisited.) Jeffrey Carter
2004-01-16 21:37 ` Randy Brukardt
2004-01-19 11:33 ` Dmitry A. Kazakov
2004-01-16 3:11 ` The "()" operator revisited Mark A. Biggar
2004-01-16 13:28 ` Hyman Rosen
2004-01-16 16:19 ` Robert A Duff
2004-01-16 18:09 ` Warren W. Gay VE3WWG
2004-01-16 13:56 ` Frank J. Lhota
2004-01-16 16:14 ` Robert A Duff [this message]
2004-01-16 21:29 ` Frank J. Lhota
-- strict thread matches above, loose matches on Subject: below --
2004-01-13 17:46 amado.alves
2004-01-13 22:21 ` Randy Brukardt
2004-01-13 17:53 amado.alves
2004-01-14 9:09 ` Dmitry A. Kazakov
2004-01-14 12:55 ` Georg Bauhaus
2004-01-14 15:05 ` Dmitry A. Kazakov
2004-01-15 1:21 ` Georg Bauhaus
2004-01-15 8:50 ` Dmitry A. Kazakov
2004-01-15 11:09 ` Georg Bauhaus
2004-01-15 13:23 ` Dmitry A. Kazakov
2004-01-17 6:26 ` Robert I. Eachus
2004-01-14 13:04 ` Hyman Rosen
2004-01-14 15:22 amado.alves
2004-01-14 16:16 ` 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