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
next prev parent 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