Queue


Объект Queue моделирует очередь заявок, ожидающих приема объектами, следующими за данным в потоковой диаграмме, или же хранилище заявок общего назначения. При необходимости Вы можете задать максимальное время ожидания заявки в очереди. Вы также можете программно извлекать заявки из любых позиций в очереди.  

Заявка может покинуть объект Queue различными способами:

В первом случае объект Queue покидает заявка, находящаяся в самом начале очереди (в нулевой позиции). Если заявка направлена в порт outTimeout или outPreempted, то она должна покинуть объект мгновенно. Если включена опция вытеснения, то объект Queue всегда готов принять новую заявку, в противном случае при заполненной очереди заявка принята не будет. 

Поступающие заявки помещаются в очередь в определенном порядке: либо согласно правилу FIFO (в порядке поступления в очередь), либо согласно приоритетам заявок. Приоритет может быть либо явно храниться в заявке, либо вычисляться согласно свойствам заявки и каким-то внешним условиям. Очередь с приоритетами всегда примет новую входящую заявку, вычислит ее приоритет и поместит ее в очередь в позицию, соответствующую ее приоритету. Если очередь будет заполнена, то приход новой заявки вынудит последнюю хранящуюся в очереди заявку покинуть объект через порт outPreempted (но если приоритет новой заявки не будет превышать приоритет последней заявки, то тогда вместо нее будет вытеснена именно эта новая заявка).

Вы можете извлекать любые заявки из очереди с помощью метода remove(). В некоторых случаях, например, когда объект Queue используется для моделирования хранилища с произвольным доступом, имеет смысл оставлять порт out несоединенным и извлекать заявки из очереди с помощью метода remove() . Извлеченные из очереди заявки могут быть вставлены в другие процессы с помощью объектов  Enter.

Вы можете расширять функциональность объекта Queue, выполняя необходимые Вам действия в момент помещения заявки в очередь, при достижении ею начала очереди, а также при уходе заявки из объекта через любой из его портов. Пожалуйста, обратите внимание, что на момент вызова кода параметра onEnter заявка уже будет помещена в очередь, а на момент вызова кода параметров onExit или onExitTimeout будет удалена из очереди.

При необходимости вместимость очереди может быть установлена максимальной. Вы также можете динамически изменять вместимость очереди.

Заявки в очереди могут отображаться на презентации как стоящими одна за другой (тип анимации Путь), так и стоящими в как-то по-другому заданных местах (подробнее о типах анимации см. в статье Анимация объектов Основной библиотеки).

Параметры класса

Класс заявки
Класс заявок, проходящих через объект, должен быть подклассом Entity. Указав класс заявки, Вы можете напрямую обращаться к полям этого класса в коде динамических параметров, таких, как onEnter.
Синтаксис: T extends Entity
Значение по умолчанию: Entity

Переменные

StatisticsContinuous statsSize
Статистика длины очереди.
Статистика собирается только если выбрана опция объекта Включить сбор статистики.

Порты

InPort in
Входной порт.
OutPort out
Выходной порт.
OutPortPush outTimeout
Выходной порт для заявок, покидающих объект по таймауту (вследствие истечения заданного времени ожидания).
OutPortPush outPreempted
Выходной порт для заявок, покидающих объект в результате вытеснения.

Параметры

Вместимость
[Параметр виден, если не выбрана опция Максимальная вместимость] Вместимость объекта Queue.
Синтаксис: int capacity
Значение по умолчанию: 100
Максимальная вместимость
Если опция выбрана (true), то вместимость очереди будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект (и помещается в очередь).
Синтаксис: void onEnter
Локальная переменная: T entity - заявка.
Действие при подходе к выходу [динамический]
Код, выполняемый, когда заявка достигает начала очереди (позиции с номером 0).
Синтаксис: void onAtExit
Локальная переменная: T entity - заявка.
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект через порт out.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Разрешить уход по таймауту
Если опция выбрана (true), то заявки могут покидать очередь по таймауту. После проведения в очереди максимально допустимого времени заявки будут покидать объект через специальный порт outTimeout.
Синтаксис: boolean enableTimeout
Значение по умолчанию: true
Таймаут [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Выражение, вычисляющее значение таймаута (максимально допустимое время, которое заявка может провести в очереди) для заявки.
Синтаксис: double timeout
Локальная переменная: T entity - заявка.
Значение по умолчанию: Double.POSITIVE_INFINITY
Действие при уходе по таймауту [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Код, выполняемый, когда заявка покидает объект по таймауту (прождав в очереди максимально допустимое время) через специальный порт outTimeout.
Синтаксис: void onExitTimeout
Локальная переменная: T entity - заявка.
Разрешить вытеснение
Если опция выбрана (true), то заявки помещаются в очередь в соответствии с их приоритетами и могут быть вытеснены из очереди заявками с более высокими приоритетами. 
Синтаксис: boolean enablePreemption
Значение по умолчанию: false
Приоритет заявки [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Приоритет поступающей в объект заявки (чем больше значение, тем выше приоритет).
Синтаксис: double priority
Значение по умолчанию: 0
Локальная переменная: T entity - заявка.
Действие при вытеснении [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Код, выполняемый, когда заявка покидает объект через порт outPreempted в результате вытеснения.
Синтаксис: void onExitPreempted
Локальная переменная: T entity - заявка.
Фигура анимации
Фигура анимации объекта Queue. Тип фигуры зависит от выбранного Типа анимации.
Синтаксис: Shape animationGuide
Тип анимации
Тип анимации объекта Queue. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationType
Значение по умолчанию: Путь
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации
[Параметр виден, если в качестве Типа анимации выбран Путь] Направление движения анимаций по фигуре анимации объекта.
Синтаксис: boolean animationForward
Значение по умолчанию:  Вперед (true)
Включить сбор статистики
Если опция выбрана (true), то для объекта будет собираться статистика длины очереди.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

int size() - возвращает количество заявок, находящихся в данный момент в очереди.

boolean canEnter() -  возвращает true, если в очередь может быть добавлена еще одна заявка.

T get( int index ) - возвращает заявку, находящуюся в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).

T removeFirst() - извлекает первую заявку (из позиции с номером 0) из очереди и возвращает ее.

T remove( T entity ) - извлекает заявку entity из очереди и возвращает ее. Если такой заявки в очереди обнаружено не будет, метод вернет null.

void resetStats() - удаляет статистику, собранную объектом к текущему моменту времени.