Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / Lab_11 / petry

.h
Скачиваний:
17
Добавлен:
16.04.2013
Размер:
4.82 Кб
Скачать
#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
Соседние файлы в папке Lab_11