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: Mon, 30 Oct 2017 20:30:57 +0200 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: p7dn7ovnlfKNrsGJsG/4aA.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:48673 Date: 2017-10-30T20:30:57+02:00 List-Id: Dmitry A. Kazakov wrote: > On 2017-10-30 11:41, Victor Porton wrote: > >> I do not understand your logic in Generic_Directed_Graph: >> >> The procedures like >> >> procedure Disconnect (Parent : Node; Child : Node); >> >> do not take "Graph" argument. > > A graph consists of connected nodes. Each node is in and a graph. > >> Does it mean that there exists just one graph (per instantiation)? > > No. If two nodes are mutually unreachable you have two graphs. > >> This looks wrong for me. First it is using global variables. > > It uses referential semantics. Node is an access type to the type you > pass to the package when you instantiate it. E.g. if you want a graph of > Strings you instantiate the package with String. Then Node is a pointer > to string. > > The notion of scope does not really applied to the structures like > graph. You can scope the pool you pass to the instance. You can scope > nodes with some logic attached when a node leaves its scope. But > otherwise it makes little sense to talk about the scope of a graph. Oh, I've finally realized that Node_Type and Node are not the same type. Now your logic seems clear. But how to solve my particular problem? I have two objects (URI1 and URI2) of URI_Type type each (or for simplicity both could be two strings). I need to check if there exists a path from URI1 to URI2. How to do this? My current idea is to use Ada standard "map" container which could map from "access URI_Type" to "URI_Type" (for all URIs in the considered finite set) before asking your generic package for existence of a path. The same problem appears when I insert new edges: An edge should be identified by two values of type URI_Type but you require two accesses to URI_Type instead. Should I convert URI_Type to "access URI_Type" using a standard map before inserting into the graph? -- Victor Porton - http://portonvictor.org