A.18.27 The Generic Package Containers.Synchronized_Queue_Interfaces
1/3
{
AI05-0159-1}
The language-defined generic package Containers.Synchronized_Queue_Interfaces
provides interface type Queue, and a set of operations for that type.
Interface Queue specifies a first-in, first-out queue.
Static Semantics
2/3
{
AI05-0159-1}
The generic library package Containers.Synchronized_Queue_Interfaces
has the following declaration:
3/3
generic
type Element_Type is private;
package Ada.Containers.Synchronized_Queue_Interfaces is
pragma Pure(Synchronized_Queue_Interfaces);
4/3
type Queue is synchronized interface;
5/3
procedure Enqueue
(Container : in out Queue;
New_Item : in Element_Type) is abstract
with Synchronization => By_Entry;
6/3
procedure Dequeue
(Container : in out Queue;
Element : out Element_Type) is abstract
with Synchronization => By_Entry;
7/3
function Current_Use (Container : Queue) return Count_Type is abstract;
function Peak_Use (Container : Queue) return Count_Type is abstract;
8/3
end Ada.Containers.Synchronized_Queue_Interfaces;
9/3
procedure Enqueue
(Container : in out Queue;
New_Item : in Element_Type) is abstract;
10/3
{
AI05-0159-1}
{
AI05-0262-1}
{
AI05-0264-1}
A queue type that implements this interface may
have a bounded capacity. If the queue object
has a bounded capacity, and the number of existing elements equals the
capacity, then Enqueue blocks until storage becomes available; otherwise,
Enqueue does not block. In any case, it then copies New_Item onto the
queue.
11/3
procedure Dequeue
(Container : in out Queue;
Element : out Element_Type) is abstract;
12/3
{
AI05-0159-1}
{
AI05-0251-1}
If the queue is empty, then Dequeue blocks until
an item becomes available. In any case, it then assigns the element at
the head of the queue to Element, and removes it from the queue.
13/3
function Current_Use (Container : Queue) return Count_Type is abstract;
14/3
{
AI05-0159-1}
Returns the number of elements currently in the
queue.
15/3
function Peak_Use (Container : Queue) return Count_Type is abstract;
16/3
{
AI05-0159-1}
Returns the maximum number of elements that have
been in the queue at any one time.
17/3
51 {
AI05-0251-1}
Unlike other language-defined containers, there
are no queues whose element types are indefinite. Elements of an indefinite
type can be handled by defining the element of the queue to be a holder
container (see A.18.18) of the indefinite
type, or to be an explicit access type that designates the indefinite
type.
17.a/3
Reason: There are
no indefinite queues, as a useful definition for Dequeue is not possible.
Dequeue cannot be a function, as Ada does not have entries that are functions
(thus conditional and timed calls would not be possible). Moreover, protected
functions do not allow modifying the queue object (thus it doesn't work
even if we decided we didn't care about conditional and timed calls).
If Dequeue is an entry, then the dequeued object would have to be an
out parameter and that would require the queue client to guess
the tag and constraints of the value that will be dequeued (otherwise
Constraint_Error would be raised), and that is rarely going to be possible.
Extensions to Ada 2005
17.b/3
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe