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 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: Victor Porton Newsgroups: comp.lang.ada Subject: Re: Simple Components (Generic_Directed_Graph) Date: Tue, 31 Oct 2017 13:12:42 +0200 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: AXbaCSC1gsQOwLBV12d/+A.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@aioe.org User-Agent: KNode/4.14.10 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:48685 Date: 2017-10-31T13:12:42+02:00 List-Id: Dmitry A. Kazakov wrote: > 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. Why Node.all'Unchecked_Access? Isn't it the same as Node? Why no copies? Because of so defined "<"? > 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. Duplicated strings is NOT an exception. What should I do? > 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. -- Victor Porton - http://portonvictor.org