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 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!newsfeed0.kamp.net!newsfeed.kamp.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: Generic Embedded List Nodes Date: Sat, 25 Jun 2016 08:50:39 +0300 Organization: Tidorum Ltd Message-ID: References: <66c14298-c62d-4f4b-b0c0-e969454f9334@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> <9ada1cdc-2fbd-4009-99f1-aba71ac1b9d2@googlegroups.com> <2954ae98-c4a0-4089-93bc-97854e009785@googlegroups.com> <581cb97c-9d81-4a81-9a05-eed0516ce287@googlegroups.com> <689e8b26-3ece-4d72-8992-d42b04fab3b4@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net +nekqS1eBu7hklJ8Q9Ew3wFeh6ASNDrEgX3X07GFy8UL7kZW9O Cancel-Lock: sha1:+E+reVepV9vyfO5DYptyNfYRFqU= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 In-Reply-To: <689e8b26-3ece-4d72-8992-d42b04fab3b4@googlegroups.com> Xref: news.eternal-september.org comp.lang.ada:30918 Date: 2016-06-25T08:50:39+03:00 List-Id: On 16-06-24 15:49 , Warren wrote: > On Thursday, 23 June 2016 11:36:25 UTC-4, Niklas Holsti wrote: >> My example had two embedded list nodes in the object, so the object >> could be a member of two lists. You can define as many nodes as you >> like, in the same record type, at the same time. > > Sorry, yes I see it now. > >> type Integer_Object_T; >> >> type Integer_Emb_Node_T (Obj : access Integer_Object_T) > > is new Emb_Node_T with null record; > > I think when I had tried to do this, I had the chicken and egg problem. > But I see you used the forward undefined type mechanism. I may explore > this further at some point-- it certainly seems to solve the problem > as I laid it out. I just need to find some quiet time. Thanks for the help. You are very welcome, Warren. By the way, for record (so to speak), the procedures "Insert_At_Head" and "Delete" shown in my example each has an error: a possible use of a null reference. The versions below should be better, but they are still not tested. procedure Insert_At_Head ( List : access List_T; Node : in Emb_Node_Ref_T) is begin if List.Next /= null then List.Next.Prev := Node; end if; Node.Next := List.Next; List.Next := Node; Node.Prev := Emb_Node_Ref_T (List); end Insert_At_Head; procedure Delete (Node : in Emb_Node_Ref_T) is begin Node.Prev.Next := Node.Next; if Node.Next /= null then Node.Next.Prev := Node.Prev; end if; Node.Prev := null; Node.Next := null; end Delete; -- Niklas Holsti Tidorum Ltd niklas holsti tidorum fi . @ .