comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Simple Components (Generic_Directed_Graph)
Date: Mon, 30 Oct 2017 23:39:41 +0100
Date: 2017-10-30T23:39:41+01:00	[thread overview]
Message-ID: <ot89nb$72j$1@gioia.aioe.org> (raw)
In-Reply-To: ot852c$1tts$1@gioia.aioe.org

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


  reply	other threads:[~2017-10-30 22:39 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-30 10:41 Simple Components (Generic_Directed_Graph) Victor Porton
2017-10-30 11:04 ` Victor Porton
2017-10-30 11:34   ` Dmitry A. Kazakov
2017-10-30 11:23 ` Dmitry A. Kazakov
2017-10-30 14:58   ` Victor Porton
2017-10-30 15:46     ` Dmitry A. Kazakov
2017-10-30 17:46       ` Dennis Lee Bieber
2017-10-30 20:29         ` Dmitry A. Kazakov
2017-10-30 15:13   ` Victor Porton
2017-10-30 15:54     ` Dmitry A. Kazakov
2017-10-30 18:30   ` Victor Porton
2017-10-30 20:43     ` Dmitry A. Kazakov
2017-10-30 21:20       ` Victor Porton
2017-10-30 22:39         ` Dmitry A. Kazakov [this message]
2017-10-31  7:36           ` Simon Wright
2017-10-31  8:16             ` Dmitry A. Kazakov
2017-10-31 11:12           ` Victor Porton
2017-10-31 12:42             ` Dmitry A. Kazakov
2017-10-31 15:07               ` Victor Porton
2017-10-31 15:48                 ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox