From: Mart van de Wege <mvdwege@gmail.com>
Subject: Getting the index for an element in mutually referencing containers
Date: Thu, 09 Mar 2017 14:45:09 +0100
Date: 2017-03-09T14:45:09+01:00 [thread overview]
Message-ID: <86o9xa36oq.fsf@gaheris.avalon.lan> (raw)
I am missing another thing: I managed to boil down the problem to the
PoC code below. I want to have two objects, each with a container as a
record attribute, referring to each other, and then merely get the index
value of one of the two containers. Yet if I do, I get a Storage_Error
exception.
Code:
with Ada.Containers.Indefinite_Vectors;
with Ada.Containers.Indefinite_Doubly_Linked_Lists;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Test_Container is
type Abstract_Person is abstract tagged null record;
package Offspring is new Ada.Containers.Indefinite_Vectors
(Index_Type => Positive,
Element_Type => Abstract_Person'Class);
package Group is new Ada.Containers.Indefinite_Doubly_Linked_Lists
(Element_Type => Abstract_Person'Class);
type Person is new Abstract_Person with record
Children : Offspring.Vector := Offspring.To_Vector(4);
Parents : Group.List;
end record;
Father : Person;
Child : Person;
begin
Child.Parents.Prepend(Father);
Father.Children.Append(Child);
Put(Integer(Father.Children.Find_Index(Child)));
end Test_Container;
This compiles OK, but on runtime throws an exception:
raised STORAGE_ERROR : stack overflow or erroneous memory access
Now, cyclic dependencies are tricky, so I am sure I am doing something
wrong, but I can't for the life of me see what.
Mart
--
"We will need a longer wall when the revolution comes."
--- AJS, quoting an uncertain source.
next reply other threads:[~2017-03-09 13:45 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-09 13:45 Mart van de Wege [this message]
2017-03-09 15:25 ` Getting the index for an element in mutually referencing containers Egil H H
2017-03-09 15:45 ` Mart van de Wege
2017-03-09 16:02 ` Mart van de Wege
2017-03-09 16:11 ` Egil H H
[not found] ` <ly7f3xedp4.fsf@pushface.org>
[not found] ` <86k27xpikd.fsf@gaheris.avalon.lan>
[not found] ` <lywpbxc9my.fsf@pushface.org>
[not found] ` <86wpbxneuz.fsf@gaheris.avalon.lan>
[not found] ` <o9vcbp$t0t$1@franka.jacob-sparre.dk>
2017-03-11 6:45 ` Mart van de Wege
2017-03-11 8:40 ` Simon Wright
2017-03-11 8:58 ` Dmitry A. Kazakov
2017-03-11 11:21 ` Simon Wright
2017-03-11 14:18 ` Dmitry A. Kazakov
2017-03-11 20:05 ` Simon Wright
2017-03-11 20:52 ` Dmitry A. Kazakov
2017-03-11 21:46 ` Simon Wright
2017-03-11 22:37 ` Niklas Holsti
2017-03-12 8:22 ` Simon Wright
2017-03-12 9:38 ` G.B.
2017-03-12 11:21 ` Simon Wright
2017-03-13 10:29 ` Alejandro R. Mosteo
2017-03-12 8:20 ` Dmitry A. Kazakov
2017-03-12 11:30 ` Simon Wright
2017-03-12 11:55 ` Dmitry A. Kazakov
2017-03-12 16:44 ` Simon Wright
2017-03-12 17:42 ` Dmitry A. Kazakov
2017-03-13 19:55 ` Randy Brukardt
2017-03-13 20:53 ` Dmitry A. Kazakov
2017-03-14 20:40 ` Randy Brukardt
2017-03-15 8:44 ` Dmitry A. Kazakov
2017-03-15 20:12 ` Randy Brukardt
2017-03-16 2:59 ` Paul Rubin
2017-03-16 9:04 ` Dmitry A. Kazakov
2017-03-13 23:25 ` Simon Wright
2017-03-14 8:25 ` Dmitry A. Kazakov
2017-03-12 1:36 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox