A.18.28 The Generic Package Containers.Unbounded_Synchronized_Queues
Static Semantics
{
AI05-0159-1}
The language-defined generic package Containers.Unbounded_Synchronized_Queues
provides type Queue, which implements the interface type Containers.Synchronized_Queue_Interfaces.Queue.
{
AI12-0112-1}
with System;
with Ada.Containers.Synchronized_Queue_Interfaces;
generic
with package Queue_Interfaces
is
new Ada.Containers.Synchronized_Queue_Interfaces (<>);
Default_Ceiling : System.Any_Priority := System.Priority'Last;
package Ada.Containers.Unbounded_Synchronized_Queues
with Preelaborate,
Nonblocking, Global =>
in out synchronized is
Discussion: {
AI12-0112-1}
For discussion on the reasons and meaning of the specifications of the
Global and Nonblocking aspects of this generic package, see the notes
on the specification of the Containers.Vectors package (see
A.18.2).
package Implementation is
... -- not specified by the language
end Implementation;
protected type Queue
(Ceiling : System.Any_Priority := Default_Ceiling)
with Priority => Ceiling
is
new Queue_Interfaces.Queue
with
overriding
entry Enqueue (New_Item :
in Queue_Interfaces.Element_Type);
overriding
entry Dequeue (Element :
out Queue_Interfaces.Element_Type);
{
AI12-0112-1}
overriding
function Current_Use
return Count_Type
with Nonblocking, Global =>
null, Use_Formal =>
null;
overriding
function Peak_Use
return Count_Type
with Nonblocking, Global =>
null, Use_Formal =>
null;
private
... -- not specified by the language
end Queue;
private
... -- not specified by the language
end Ada.Containers.Unbounded_Synchronized_Queues;
{
AI05-0159-1}
The type Queue is used to represent task-safe queues.
{
AI05-0159-1}
The capacity for instances of type Queue is unbounded.
Ramification: Enqueue never blocks; if
more storage is needed for a new element, it is allocated dynamically.
We don't need to explicitly specify that Queue needs finalization, because
it is visibly protected.
Discussion: Nested package Implementation
can be used to declare the types needed to implement the protected type
Queue. This nested package is necessary as types cannot be declared in
the private part of a protected type, and the types have to be declared
within the generic unit in order to depend on the types imported with
package Queue_Interfaces. Clients should never depend on the contents
of nested package Implementation.
Extensions to Ada 2005
{
AI05-0159-1}
The generic package Containers.Unbounded_Synchronized_Queues
is new.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe