From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Generic Embedded List Nodes
Date: Tue, 21 Jun 2016 08:52:47 +0300
Date: 2016-06-21T08:52:47+03:00 [thread overview]
Message-ID: <dss31fF4s56U1@mid.individual.net> (raw)
In-Reply-To: <2e69ca6f-484c-4d58-b0fe-d17a744b1418@googlegroups.com>
On 16-06-21 05:20 , Warren wrote:
> On Monday, 20 June 2016 15:33:16 UTC-4, Niklas Holsti wrote:
>> On 16-06-20 15:26 , Warren wrote:
>>
>>> Anyway folks- thanks for your help but I now have a working solution. I'm signing off this thread.
>>
>> Before signing off, do please describe your solution.
>
> I thought I had the problem licked using the following generic
> Object_Of function, but when I whipped up an example, the compile
> problem returned (or there was pilot error):
>
> function Object_Of(
> Node: access Emb_Node;
> Member: Natural
> ) return Object_Type is
> use System.Storage_Elements;
>
> A: constant System.Address := Node.all'Address;
> B: constant System.Address := A - Storage_Offset(Member);
> R: Object_Type;
> for R'Address use B;
> pragma Import(Convention => Ada, Entity => R);
> begin
> return R;
> end Object_Of;
>
> The compiler is complaining with:
>
> warning: controlled object "R" must not be overlaid.
The component My_Recd.Name, of the controlled type Unbounded_String, is
making Object_Type also controlled. I well understand that the compiler
does not want controlled objects to be overlaid with address clauses.
Instead of a function returning Object_Type, you could try returning an
access to Object_Type, as produced by an instance of
System.Address_To_Access_Conversions. In fact, if I understand your
goals, you do not want Object_Of to return a _copy_ of the object
containing the Emb_Node, the need is to _find_ that very object.
Returning an access value is closer to what you want, I believe.
> The test record looks like this:
>
> type My_Recd is
> record
> ID: Natural;
> Node: aliased Emb_Node;
> Name: Unbounded_String;
> end record;
If you don't get the address arithmetic to work, I believe that a set of
mixin-generics could be used to add as many embedded Emb_Nodes to a
tagged limited record, with access discriminants pointing to the
containing record. This would eliminate the address arithmetic, at the
cost of increasing the size of the record by the sizes of the
discriminants (not a great deal).
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2016-06-21 5:52 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-18 22:52 Generic Embedded List Nodes Warren
2016-06-18 23:40 ` Jeffrey R. Carter
2016-06-19 2:15 ` Warren
2016-06-19 3:04 ` Jeffrey R. Carter
2016-06-19 2:14 ` Jeremiah
2016-06-19 2:21 ` Warren
2016-06-19 2:50 ` Warren
2016-06-19 4:45 ` Simon Wright
2016-06-19 18:27 ` Warren
2016-06-19 19:04 ` Dmitry A. Kazakov
2016-06-19 20:13 ` Warren
2016-06-19 20:35 ` Dmitry A. Kazakov
2016-06-20 2:42 ` Warren
2016-06-20 7:25 ` Dmitry A. Kazakov
2016-06-20 12:26 ` Warren
2016-06-20 19:33 ` Niklas Holsti
2016-06-21 2:20 ` Warren
2016-06-21 5:52 ` Niklas Holsti [this message]
2016-06-21 7:15 ` Dmitry A. Kazakov
2016-06-21 18:54 ` Niklas Holsti
2016-06-21 19:54 ` Dmitry A. Kazakov
2016-06-21 10:31 ` Warren
2016-06-21 17:13 ` Jeffrey R. Carter
2016-06-21 18:56 ` Niklas Holsti
2016-06-21 20:13 ` Warren
2016-06-21 21:38 ` Niklas Holsti
2016-06-23 2:12 ` Warren
2016-06-23 8:19 ` Niklas Holsti
2016-06-23 12:37 ` Warren
2016-06-23 15:36 ` Niklas Holsti
2016-06-24 1:55 ` Warren
2016-06-24 12:49 ` Warren
2016-06-25 5:50 ` Niklas Holsti
2016-06-26 1:36 ` Warren
2016-07-01 13:49 ` Warren
2016-07-01 16:28 ` Warren
2016-06-24 20:25 ` Warren
2016-06-22 13:01 ` G.B.
2016-06-23 2:30 ` Warren
2016-06-20 6:08 ` Niklas Holsti
2016-06-20 12:20 ` Warren
2016-06-20 19:47 ` Shark8
2016-06-21 2:28 ` Warren
2016-06-21 7:21 ` Dmitry A. Kazakov
2016-06-21 10:32 ` Warren
2016-06-21 11:56 ` Dmitry A. Kazakov
2016-06-21 13:39 ` Warren
2016-06-21 14:04 ` Dmitry A. Kazakov
2016-06-23 0:37 ` Randy Brukardt
2016-06-23 2:25 ` Warren
2016-07-01 19:50 ` brbarkstrom
2016-07-02 1:55 ` Warren
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox