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!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Getting the index for an element in mutually referencing containers Date: Tue, 14 Mar 2017 09:25:21 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <86o9xa36oq.fsf@gaheris.avalon.lan> <86k27xpikd.fsf@gaheris.avalon.lan> <86wpbxneuz.fsf@gaheris.avalon.lan> NNTP-Posting-Host: vZYCW951TbFitc4GdEwQJg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:31014 Date: 2017-03-14T09:25:21+01:00 List-Id: On 14/03/2017 00:25, Simon Wright wrote: > "Dmitry A. Kazakov" writes: > >> On 2017-03-12 17:44, Simon Wright wrote: >>> "Dmitry A. Kazakov" writes: >>> >>>> On 2017-03-12 12:30, Simon Wright wrote: >>>>> "Dmitry A. Kazakov" writes: >>>>> >>>>>> On 2017-03-11 22:46, Simon Wright wrote: >>>>> >>>>>>> Basically, I (Simon, now) am having trouble thinking of an >>>>>>> application where reference counting would be an appropriate >>>>>>> solution. >>>>>> >>>>>> As I said, in practice it is all cases when you would have a >>>>>> container of mutable elements. >>>>> >>>>> I had some trouble understanding your point the first time, and >>>>> skipped over it (sorry). >>>>> >>>>> What's the opposite of "mutable"? constant? because, if so, why >>>>> wouldn't I use Update_Element? >>>> >>>> Yes, But it is almost never element update. Usually what you want is >>>> to call some mutable operations on the element. The language does not >>>> offer user-defined by-reference or copy-out-copy-in methods to element >>>> access. >>> >>> with Ada.Containers.Vectors; >>> package Mutable_Elements is >>> type Element is record >> >> [...] >> >> Your example uses access type in Reference_Type which was the point. > > There may be pointers under the hood, Under a straw hat with huge holes meant for ventilation alas exposing ugly nasty lack of hair and warts. Pointers are right in the public part of Ada.Containers.Vectors. Even if Reference_Type were an opaque type with no visible access discriminant, it would still be a pointer in its semantics with all strings attached. Thus if it must be there [*], it must better be a smart pointer, e.g. to a reference-counted object. BTW, reference-counted design gives means to resolve problems with at-cursor object deletion and aliased updates in one or another manner. ------------------------ * There should be no helper types needed to access container elements "in place". -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de