136
сети вместе с их номерами в соответствии с порядком их добав-
ления. Помимо этого, в нем хранится информация о входных и
выходных дугах, а также о начальной разметке. Класс предостав-
ляет вызывающему коду функции добавления позиции, перехода,
входной и выходной дуг, а также помещения фишки в позицию.
Помимо этого, для класса
составного перехода предоставляются
функции получения в упорядоченной форме списка позиций,
списка переходов, матриц входных и выходных позиций и векто-
ра начальной разметки. Все эти данные передаются в соответст-
вующие структуры класса составного перехода в момент созда-
ния соответствующего объекта.
В процессе выполнения составной переход постоянно со-
держит текущий полный список
внутренних разрешенных пере-
ходов m_enabled_full. Для поддержания актуальности этого спи-
ска используются две функции refresh_enabled, о которых под-
робнее поговорим позже. Помимо этого, в объекте содержится
вектор текущей разметки m_marking, набор флагов разрешения
либо активности переходов текущего уровня (без учета вложен-
ности), а также две структуры данных, используемых для локали-
зации срабатывающего перехода. Функция
activate размечает пе-
реход в соответствии с начальной разметкой и обновляет текущее
состояние списка разрешенных переходов. Если этот список не
пуст, при вызове функции is_active возвращается значение исти-
ны. Построенный список может быть получен с помощью функ-
ции get_enabled. Наконец, функция fire локализует переход, но-
мер которого передан ей в качестве параметра, и осуществляет
действия по срабатыванию. Подробнее об этом мы поговорим по-
сле обсуждения функций обновления списка разрешенных пере-
ходов.
Определение, разрешен ли какой-либо переход, выполняет-
ся на основе матрицы входных дуг и текущей разметки. При
большом количестве позиций эта операция может быть довольно
тяжеловесной, поэтому следует избегать частого вычисления раз-
решения для
всех переходов. По этой причине мы имеем две
функции обновления текущего списка разрешенных переходов.
Одна из них выполняет полное обновление списка разрешенных