////////////////////////////////////////////////////////////////////////////
// Model MODEL5.CPP               SIMLIB/C++
//
// Ukázkový model obslužného střediska (2 zařízení 1 fronta), jiná strategie
//

#include "simlib.h"

// deklarace globálních objektů
Facility  Box[2];                 // bohužel nelze inicializovat
Queue InQueue("Vstupní");
Histogram Tabulka("Tabulka",0,5,20);

class Zakaznik : public Process { // třída zákazníků
  double Prichod;                 // atribut každého zákazníka
  int BoxNum;
  void Behavior() {               // --- popis chování zákazníka ---
    Prichod = Time;               // čas příchodu zákazníka
    BoxNum = (Random()<0.5) ? 0 : 1;
    if (Box[BoxNum].Busy()) 
      {Into(InQueue); Passivate(); } // ##### ????? !!!!!!
    Seize(Box[BoxNum]);           // obsazení zařízení
    Wait(10);                     // obsluha
    Release(Box[BoxNum]);         // uvolnění
    for( Queue::iterator p = InQueue.begin();
         p != InQueue.end();
         ++p ) {
      Zakaznik *z = (Zakaznik*)(*p);
      if( z->BoxNum == BoxNum ) {
        z->Out();
        z->Activate();
        break;
      }
    } // for 
    Tabulka(Time-Prichod);        // doba obsluhy a čekání
  }
  public: Zakaznik() { Activate(); } // konstruktor aktivuje
}; // Zakaznik

class Generator : public Event {  // generátor zákazníků
  void Behavior() {               // --- popis chování generátoru ---
    new Zakaznik;                 // nový zákazník
    Activate(Time+Exponential(1e3/150));  // interval mezi příchody
  }
  public: Generator() { Activate(); } // konstruktor aktivuje
};

int main() {
  Print(" MODEL5 - test SIMLIB\n");
  SetOutput("model5.out");
  Init(0,1000);              // inicializace experimentu, čas bude 0..1000
  Box[0].SetName("Box[0]");
  Box[1].SetName("Box[1]");
  new Generator;             // generátor zákazníků
  Run();                     // simulace
  Box[0].Output();           // tisk výsledků
  Box[1].Output();
  InQueue.Output();
  Tabulka.Output();
  return 0;
}

// konec


syntax highlighted by Code2HTML, v. 0.9.1