Ada Conformity Assessment Authority      Home Conformity Assessment   Test Suite ARGAda Standard
Annotated Ada Reference Manual (Ada 202x Draft 26)Legal Information
Contents   Index   References   Search   Previous   Next 

A.18.14 The Generic Package Containers.Indefinite_Ordered_Maps

{AI95-00302-03} The language-defined generic package Containers.Indefinite_Ordered_Maps provides a map with the same operations as the package Containers.Ordered_Maps (see A.18.6), with the difference that the generic formal types Key_Type and Element_Type are indefinite. 

Static Semantics

{AI95-00302-03} {AI05-0092-1} The declaration of the generic library package Containers.Indefinite_Ordered_Maps has the same contents and semantics as Containers.Ordered_Maps except:
The generic formal Key_Type is indefinite.
The generic formal Element_Type is indefinite.
The procedure with the profile: 
procedure Insert (Container : in out Map;
                  Key       : in     Key_Type;
                  Position  :    out Cursor;
                  Inserted  :    out Boolean);
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 Include, Insert, Replace, and Replace_Element that have a formal parameter of type Element_Type perform indefinite insertion (see A.18). 
Discussion: Some of the named operations also have a formal of the indefinite formal type Key_Type and perform indefinite insertion using that value, but it is sufficient to mention the formal of type Element_Type to cover those.
{AI12-0111-1} {AI12-0112-1} The description of Tampering_With_Elements_Prohibited is replaced by:
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 and Replace_Element are omitted from the nested package Stable.

Extensions to Ada 95

{AI95-00302-03} The generic package Containers.Indefinite_Ordered_Maps 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 202x for code that would have worked in Ada 2012. See Inconsistencies With Ada 2012 in A.18.11 for details. 

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe