Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#ifndef PETRY
#define PETRY
////////////////////////////////////////////////////////////////////////////////////////////////////
#include "library.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
struct SItem //состояние
{
int ID; //идентификатор
int M; //количество меток в состоянии
CList TS; //список входящих связей
CList ST; //список выходящих связей
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct TItem //переход
{
int ID; //идентификатор
bool A; //флаг активности
int D; //время активности
CList ST; //список входящих связей
CList TS; //список выходящих связей
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct STItem //ST связь
{
int N; //количество захватываемых меток
SItem* S; //состояние-источник
TItem* T; //переход-приемник
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct TSItem //TS связь
{
int N; //количество отдаваемых меток
TItem* T; //переход-источник
SItem* S; //состояние-приемник
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct SPItem //описание внешнего воздействия
{
SItem* S; //объект воздействия
int P; //момент воздействия
int M; //количество добавляемых меток
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct TPItem //описание активного перехода
{
TItem* T; //переход
int P; //момент конца активности
};
////////////////////////////////////////////////////////////////////////////////////////////////////
struct ECItem //элемент календаря событий
{
TItem* T; //переход
int P1; //момент начала активности
int P2; //момент конца активности
};
////////////////////////////////////////////////////////////////////////////////////////////////////
class CNet //сеть Петри
{
public:
~CNet();
int LoadFromFile(char*); //загрузить информацию о сети из файла
int Run(void); //начать работу сети
void Clear(void); //очистить сеть
int SaveEC(char*); //сохранить календарь событий в файле
private:
int LoadS(void); //загрузить S из файла
int LoadT(void); //загрузить T из файла
int LoadST(void); //загрузить ST из файла
int LoadTS(void); //загрузить TS из файла
int LoadSP(void); //загрузить SP из файла
int LoadTP(void); //загрузить TP из файла
int SetupS(void); //настроить списки связей для S
int SetupT(void); //настроить списки связей для T
int Prepare(void); //подготовить EC к началу работы сети
int Finish(void); //завершить выполнение переходов
int External(void); //выполнить внешние воздействия
int Start(void); //начать выполнение переходов
private:
CList S; //список состояний
CList T; //список переходов
CList ST; //список ST связей
CList TS; //список TS связей
CList SP; //протокол внешних воздействий
CList TP; //протокол активных переходов
CList EC; //календарь событий
CSyntaxer Stx; //необходим для загрузки файлов
int Time; //текущее время
};
////////////////////////////////////////////////////////////////////////////////////////////////////
#endif