From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.28.193.129 with SMTP id r123mr427847wmf.5.1466505113496; Tue, 21 Jun 2016 03:31:53 -0700 (PDT) X-Received: by 10.157.45.14 with SMTP id v14mr627408ota.12.1466505113386; Tue, 21 Jun 2016 03:31:53 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!goblin1!goblin.stu.neva.ru!oe3no6859136lbb.1!news-out.google.com!f5ni26242lbb.0!nntp.google.com!oe3no6859135lbb.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Tue, 21 Jun 2016 03:31:53 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=216.121.226.25; posting-account=ENgozAkAAACH-stq5yXctoDQeZQP2E6J NNTP-Posting-Host: 216.121.226.25 References: <66c14298-c62d-4f4b-b0c0-e969454f9334@googlegroups.com> <2e39857a-7121-476b-807a-d2bff1e598f4@googlegroups.com> <431af616-7df3-4e4d-9262-26ed68cb74c7@googlegroups.com> <037df2b8-b9c4-4447-87ee-cc89d7072b30@googlegroups.com> <15914c54-191c-4f37-b754-282855d1aeaf@googlegroups.com> <3e25c9a0-469c-4487-b78e-6f87434f87fa@googlegroups.com> <2e69ca6f-484c-4d58-b0fe-d17a744b1418@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <9ada1cdc-2fbd-4009-99f1-aba71ac1b9d2@googlegroups.com> Subject: Re: Generic Embedded List Nodes From: Warren Injection-Date: Tue, 21 Jun 2016 10:31:53 +0000 Content-Type: text/plain; charset=UTF-8 Xref: news.eternal-september.org comp.lang.ada:30854 Date: 2016-06-21T03:31:53-07:00 List-Id: On Tuesday, 21 June 2016 01:52:51 UTC-4, Niklas Holsti wrote: > 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. That is correct (no copy). The suggestion for System.Address_To_Access_Conversions seems like a potential solution. The only other thing I can do is try to cheat with a C routine returning an address, but GNAT is just as likely to complain. Warren