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!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Simple Components (Generic_Directed_Graph) Date: Mon, 30 Oct 2017 23:39:41 +0100 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: MajGvm9MbNtGBKE7r8NgYA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 X-Notice: Filtered by postfilter v. 0.8.2 X-Mozilla-News-Host: news://news.aioe.org Content-Language: en-US Xref: news.eternal-september.org comp.lang.ada:48680 Date: 2017-10-30T23:39:41+01:00 List-Id: On 2017-10-30 22:20, Victor Porton wrote: > The issue here that equal strings should get equal access values. That is > the same string should be never in more than one node. > > Thus I use a map from URIs (or they could be strings) to node access values. Use a set of general constant access type instead. I don't know it goes with Ada containers, but normally you should be able to define a set with custom < and = defined on that access: function "=" (Left, Right : Pointer) return Boolean is begin return Left = Right or else (Left /= null and then Left.all = Right.all); end "="; function "<" (Left, Right : Pointer) return Boolean is begin return Right /= null and then (Left = null or else Left.all < Right.all); end "<"; If you put each node into the set taking Node.all'Unchecked_Access. You could test a given aliased string by taking its 'Unchecked_Access. No copies. Alternatively you can use a set of Node with order operations defined as above and allocate a copy of the tested string in the test. You then free that string if it is already in the set and use one in the set instead. If duplicated strings are rather exception a few allocations should be no problem. An finally you can have a set of access to String and a graph of that access to String nodes. I.e. Node would be an access to access to String. You can use a handle to reference counted String instead of the plain access to String. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de