Spec-Zone.ru › Ada 2022
Справочник по Ada (Ada 2022)

A.18.27 Универсальный пакет Containers.Synchronized_Queue_Interfaces

Определяемый языком универсальный пакет Containers.Synchronized_Queue_Interfaces предоставляет тип интерфейса очереди Queue и набор операций для этого типа. Интерфейс очереди Queue определяет очередь "первым вошел, первым вышел".

Статическая семантика

Универсальный пакет библиотек Containers.Synchronized_Queue_Interfaces имеет следующее объявление:
generic
type Element_Type is private;
package Ada.Containers.Synchronized_Queue_Interfaces
with Pure, Nonblocking, Global => null is
type Queue is synchronized interface;
procedure Enqueue
(Container : in out Queue;
New_Item : in Element_Type) is abstract
with Synchronization => By_Entry,
Nonblocking => False,
Global'Class=> in out synchronized;
procedure Dequeue
(Container : in out Queue;
Element : out Element_Type) is abstract
with Synchronization => By_Entry,
Nonblocking => False,
Global'Class=> in out synchronized;
function Current_Use (Container : Queue) return Count_Type is abstract
with Nonblocking, Global'Class => null, Use_Formal => null;
function Peak_Use (Container : Queue) return Count_Type is abstract
with Nonblocking, Global'Class => null, Use_Formal => null,
Post'Class => Peak_Use'Result >= Current_Use (Container);
end Ada.Containers.Synchronized_Queue_Interfaces;
Ниже приведены описания поведения подпрограмм, которые представляют семантику соответствующих вызываемых сущностей, найденных в определяемых языком универсальных пакетах, имеющих формальный пакет с именем Queue_Interfaces.
procedure Enqueue
(Container : in out Queue;
New_Item : in Element_Type) is abstract
with Synchronization => By_Entry
Nonblocking => False,
Global'Class=> in out synchronized;
Тип очереди, реализующий этот интерфейс, может иметь ограниченную емкость. Если у объекта очереди ограниченная емкость, а количество существующих элементов равно емкости, то Enqueue блокируется до тех пор, пока место не освободится; в противном случае Enqueue не блокируется. В любом случае, затем New_Item копируется в очередь.
procedure Dequeue
(Container : in out Queue;
Element : out Element_Type) is abstract
with Synchronization => By_Entry
Nonblocking => False,
Global'Class=> in out synchronized;
Если очередь пуста, то Dequeue блокируется до тех пор, пока элемент не станет доступным. В любом случае, затем элемент в начале очереди присваивается Element, и удаляется из очереди.
function Current_Use (Container : Queue) return Count_Type is abstract
with Nonblocking, Global'Class=> null, Use_Formal => null;
Возвращает количество элементов, которые в данный момент находятся в очереди.
function Peak_Use (Container : Queue) return Count_Type is abstract
with Nonblocking, Global'Class=> null, Use_Formal => null,
Post'Class => Peak_Use'Result >= Current_Use (Container);
Возвращает максимальное количество элементов, которые находились в очереди в любой момент времени.
ПРИМЕЧАНИЕ В отличие от других определенных языком контейнеров, нет очередей, типы элементов которых являются неопределенными. Элементы неопределенного типа могут обрабатываться путем определения элемента очереди как контейнера-хранилища (см. A.18.18) неопределенного типа или как явного типа доступа, который обозначает неопределенный тип.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API