A.18.17 The Generic Package Containers.Indefinite_Multiway_Trees
{
AI05-0136-1}
The language-defined generic package Containers.Indefinite_Multiway_Trees
provides a multiway tree with the same operations as the package Containers.Multiway_Trees
(see
A.18.10), with the difference that
the generic formal Element_Type is indefinite.
Static Semantics
{
AI05-0136-1}
The declaration of the generic library package Containers.Indefinite_Multiway_Trees
has the same contents and semantics as Containers.Multiway_Trees except:
The generic formal Element_Type is indefinite.
The procedure with
the profile:
procedure Insert_Child (Container : in out Tree;
Parent : in Cursor;
Before : in Cursor;
Position : out Cursor;
Count : in Count_Type := 1);
is omitted.
Discussion: This procedure is omitted
because there is no way to create a default-initialized object of an
indefinite type. We considered having this routine insert an empty element
similar to the empty elements of a vector, but rejected this possibility
because the semantics are fairly complex and very different from the
existing case. That would make it more error-prone to convert a container
from a definite type to an indefinite type; by omitting the routine completely,
any problems will be diagnosed by the compiler.
The actual Element parameter of access subprogram
Process of Update_Element may be constrained even if Element_Type is
unconstrained.
{
AI12-0035-1}
The operations Append_Child, Insert_Child, Prepend_Child, and Replace_Element
that have a formal parameter of type Element_Type perform indefinite
insertion (see
A.18).
Returns True if tampering with elements is prohibited
for Container, and False otherwise.
Reason: Complete replacement of an element
can cause its memory to be deallocated while another operation is holding
onto a reference to it. That can't be allowed. However, a simple modification
of (part of) an element is not a problem.
{
AI12-0111-1}
{
AI12-0112-1}
Tampering_With_Cursors_Prohibited is replaced by Tampering_With_Elements_Prohibited
in the postcondition for the operations Reference and Constant_Reference.
{
AI12-0111-1}
The operations Replace_Element and Swap are omitted from the nested package
Stable.
Extensions to Ada 2005
{
AI05-0136-1}
The generic package Containers.Indefinite_Multiway_Trees
is new.
Inconsistencies With Ada 2012
{
AI12-0035-1}
Corrigendum: Defined some routines to “perform
indefinite insertion”. This could mean that some calls to those
routines would now raise Program_Error where they previously worked.
However, this is extremely unlikely; see Inconsistencies With Ada 2012
in
A.18.11 for details.
{
AI12-0111-1}
Defined the Iterator_View aspect, so that the stable view is used for
container element iterators. This leads to a rare situation where Program_Error
will be raised in Ada 2022 for code that would have worked in Ada 2012.
See Inconsistencies With Ada 2012 in
A.18.11
for details.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe