comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Simple Components: adding an existing object to a graph
Date: Sun, 26 Jan 2020 14:10:55 +0100
Date: 2020-01-26T14:10:55+01:00	[thread overview]
Message-ID: <r0k34u$12st$1@gioia.aioe.org> (raw)
In-Reply-To: 87wo9eikja.fsf@gaheris.vdwege.eu

On 2020-01-26 11:23, Mart van de Wege wrote:
> This one's for Dimitry, probably: I want to create a genealogy of
> persons using his generic directed weighted graph package.
> 
> I've seen how I can do that like this (example code, assuming an
> instantiated Graph):
> 
> type Person is record
>       Name: Unbounded_String,
>       Age: Natural
> end record;
> 
> and then adding it to the graph with:
> 
> Ancestor : Node := new Person;
> 
> However, assume I already have plenty of code to create and manipulate
> Person objects, how do I assign an *existing* object of type Person to a
> graph? Trying to do it the obvious way by assigning an access to Person
> to a Node object gets me an error message that Node is not a general
> access type.

The design of the graph is based on keeping edges/links in the memory 
pool in front of the node itself. That prevents copying of nodes. Thus 
all instances of Person must be allocated in that pool, which is why the 
access type is pool-specific.

If persons need to be kept outside the pool, which I would not 
recommend, you could use a reference to person inside the node.

BTW, this is how Unbounded_String works. Name in Person actually is a 
wrapped access type to the string body allocated elsewhere. A compound 
design would rather be:

    type Person (Name_Length : Natural) is record -- Everything is here
       Age  : Natural;
       Name : String (1..Name_Length);
    end record;

P.S. For reference-counted object see Object.Handle, but don't see an 
immediate need of that. You should simply change function creating 
Person to return Node. The rest would remain.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2020-01-26 13:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-26 10:23 Simple Components: adding an existing object to a graph Mart van de Wege
2020-01-26 13:10 ` Dmitry A. Kazakov [this message]
2020-01-26 13:24   ` Mart van de Wege
2020-01-26 14:48 ` Jeffrey R. Carter
2020-01-26 15:39   ` Mart van de Wege
2020-01-26 15:49   ` Mart van de Wege
replies disabled

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