A.18.31 The Generic Package Containers.Bounded_Priority_Queues
Static Semantics
{
AI05-0159-1}
The language-defined generic package Containers.Bounded_Priority_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 (<>);
type Queue_Priority
is private;
with function Get_Priority
(Element : Queue_Interfaces.Element_Type)
return Queue_Priority
is <>;
with function Before
(Left, Right : Queue_Priority)
return Boolean
is <>;
Default_Capacity : Count_Type;
Default_Ceiling : System.Any_Priority := System.Priority'Last;
package Ada.Containers.Bounded_Priority_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
(Capacity : Count_Type := Default_Capacity;
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);
{
AI05-0159-1}
{
AI05-0251-1}
not overriding
procedure Dequeue_Only_High_Priority
(At_Least :
in Queue_Priority;
Element :
in out Queue_Interfaces.Element_Type;
Success :
out Boolean);
{
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.Bounded_Priority_Queues;
{
AI05-0159-1}
The semantics are the same as for Unbounded_Priority_Queues, except:
The capacity for instances of type Queue is bounded
and specified by the discriminant Capacity.
Ramification: Since this type has a bounded
capacity, Enqueue might block if the queue is full.
Implementation Advice
{
AI05-0159-1}
Bounded priority queue objects should be implemented without implicit
pointers or dynamic allocation.
Implementation Advice: Bounded priority
queue objects should be implemented without implicit pointers or dynamic
allocation.
Extensions to Ada 2005
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe