NetworkStorageZone


Используется при моделировании транспортных сетей. Моделирует зону хранения, состоящую из набора стеллажей и проходов между ними (моделируемыми с помощью объектов NetworkStorage), предоставляющий централизованный доступ и управление этими стеллажами. Это имеет смысл тогда, когда стеллажи используются в сходной манере, образуя какую-то общую зону хранения.

Чтобы создать зону хранения, Вам нужно вначале задать отдельно наборы стеллажей, входящих в эту зону, с помощью объектов NetworkStorage, т.e. указать их узлы входа, фигуры проходов, количество мест в ряду и уровней. Стеллажи не должны быть идентичными: они могут иметь различные вместимости и размеры ячеек; кроме того нет необходимости в выравнивании нарисованных стеллажей. Этиобъекты NetworkStorage нужно перечислить в параметре Объекты NetworkStorage  {st0, st1, ...} объекта NetworkStorageZone

NetworkStorageZone предоставляет тот же программный интерфейс, что и объект NetworkStorage, но отсчет рядов начинается с 0 до 2*(число объектов NetworkStorage)-1, поэтому, скажем, пятому объекту NetworkStorage в зоне хранения будут соответствовать стеллажи с номерами 8 и 9. Кроме того, есть дополнительный метод cellExists( row, position, level ) для проверки того, находится ли ячейка с заданными координатами в зоне хранения, и метод getMaxPositions(), возвращающий количество мест в самом протяженном стеллаже этой зоны хранения (он может пригодиться при прохождении в цикле всех стеллажей зоны хранения).

Действия, производимые при совершении действий с ячейками зоны хранения (такие, как Действие при помещении, Действие при извлечении и т.д.) не переопределяют аналогичные действия соответствующих стеллажей, а выполняются после них.

Стоит отметить, что NetworkStoragePut и NetworkStoragePick могут работать как с объектом, моделирующим зону хранения (NetworkStorageZone), так и с объектом, моделирующим стеллажи (NetworkStorage), поскольку оба этих объекта реализуют интерфейс StorageAccess.

Параметры

Объекты NetworkStorage  {st0, st1, ...}
Список имен объектов NetworkStorage, задающих стеллажи, которые входят в состав данной зоны хранения.
Синтаксис: NetworkStorage[] storages
Действие при помещении [динамический]
Код, выполняемый при помещении заявки в ячейку зоны хранения (выполняется после Действия при помещении соответствующего стеллажа).
Синтаксис: void onPut
Локальные переменные: T entity - заявка.
             int row - ряд ячейки.
             int position - место ячейки.
             int level - уровень ячейки.
             ShapeRectangle rect -  узел сети, соответствующий ячейке
Действие при извлечении [динамический]
Код, выполняемый при извлечении заявки из ячейки зоны хранения (выполняется после Действия при извлечении соответствующего стеллажа).
Синтаксис: void onRemove
Локальные переменные: T entity - заявка.
             int row - ряд ячейки.
             int position - место ячейки.
             int level - уровень ячейки.
             ShapeRectangle rect -  узел сети, соответствующий ячейке
Действие при резервировании [динамический]
Код, выполняемый, когда ячейка помечается как зарезервированная (выполняется после Действия при резервировании соответствующего стеллажа).
Синтаксис: void onReserve
Локальные переменные: T entity - заявка.
             int row - ряд ячейки.
             int position - место ячейки.
             int level - уровень ячейки.
             ShapeRectangle rect -  узел сети, соответствующий ячейке
Действие при освобождении [динамический]
Код, выполняемый, когда отменяется резервирование ячейки (выполняется после Действия при освобождении соответствующего стеллажа).
Синтаксис: void onRelease
Локальные переменные: int row - ряд ячейки.
             int position - место ячейки.
             int level - уровень ячейки.
             ShapeRectangle rect -  узел сети, соответствующий ячейке
Включить сбор статистики
Если опция выбрана (true), то для объекта будет собираться статистика.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

int capacity() - возвращает вместимость зоны хранения (сумму вместимостей отдельных стеллажей, входящих в состав этой зоны).

boolean cellExists(int row, int position, int level) - проверяет, находится ли ячейка с заданными координатами [ряд row, место position, уровень level] в этой зоне хранения (это бывает нужно тогда, когда зона хранения содержит стеллажи разной высоты или стеллажи с различным числом ячеек в ряду).

boolean contains(T entity) - проверяет, содержит ли зона хранения заявку entity.

T get(int row, int position, int level) - возвращает заявку, хранящуюся в ячейке с заданными координатами [ряд row, место position, уровень level] (или null, если эта ячейка зарезервирована или свободна).

T getByIndex(int index)возвращает заявку с заданным номером index. Порядок заявок определяется объектом и может изменяться при добавлении и удалении заявок. Если index+1 больше, чем количество заявок, то метод возвращает null.

int[] getCellOf(T entity)возвращает массив координат [ряд row, место position, уровень level] ячейки, содержащей заявку entity, или null, если заявка не хранится в этой зоне хранения.

int[] getFreeCell(boolean infront)возвращает массив координат [ряд row, место position, уровень level] свободной ячейки, ближайшей к началу или концу зоны хранения, в зависимости от значения параметра infront. Если зона хранения переполнена, возвращает null.

ShapeRectangle getLocationInAisle(int row, int position)возвращает узел сети, расположенный в проходе перед ячейкой с заданными координатами [ряд row, место position] (уровень не имеет значения, поскольку ячейки, располагающиеся одна над другой, имеют один и тот же узел).

ShapeRectangle getLocationOfCell(int row, int position)возвращает узел сети, соответствующий ячейке с заданными координатами [ряд row, место position] (уровень не имеет значения, поскольку ячейки, располагающиеся одна над другой, имеют один и тот же узел).

int getMaxPositions() - возвращает количество мест в ряду в самом протяженном стеллаже этой зоны хранения.

T getRandom() - возвращает случайную заявку из зоны хранения или null, если зона хранения пуста.

NetworkStorage<T> getStorage(int row) - возвращает стеллаж, содержащий заданный ряд.

boolean hasSpace() - проверяет, есть ли свободное место в зоне хранения, т.e. есть ли незанятые и незарезервированные ячейки.

boolean isFree(int row, int position, int level)проверяет, свободна ли ячейка [ряд row, место position, уровень level]. Свободной считается не занятая и не зарезервированная ячейка.

boolean isReserved(int row, int position, int level)проверяет, зарезервирована ли ячейка [ряд row, место position, уровень level].

void put(int row, int position, int level, T entity) - Помещает заявку entity в ячейку [ряд row, место position, уровень level]. Если ячейка занята, выдает ошибку. Не проверяет ячейку на предмет резервирования.

void release(int row, int position, int level) - отменяет резервирование ячейки [ряд row, место position, уровень level]. Ячейка должна быть зарезервирована.

T remove(T entity)извлекает заявку entity из зоны хранения и возвращает ее. Если такой заявки в зоне хранения нет, возвращает null.

T removeFromCell(int row, int position, int level) - извлекает заявку из заданной ячейки [ряд row, место position, уровень level] и возвращает ее.

void reserve(int row, int position, int level) - помечает ячейку [ряд row, место position, уровень level] как зарезервированную. При этом яечйка должна быть свободной.

int reserved()возвращает количество зарезервированных ячеек в текущий момент.

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

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