p>
}
if (_VremyaVidachi <1) _VremyaVidachi = 1;
_OprVremyaVidachi = true;
try {
__VidachaZayavki ();
}
// інформація
virtual bool _GotovKPeredache () const {//готовність до видачі заявки
return _OprVremyaVidachi && _VremyaVidachi == 0;
}
private:
void __ VidachaZayavki () throw (std :: bad_alloc);
// надлишкові функції
virtual state_t GetState () const {//отримання стану
return zanyat;
}
};
class kanal: public obrabotzayavok
// "канал (пристрій)" (приймає, обробляє і видає заявки
// через час, визначений заданим законом розподілу)
public:
// конструктор і деструктор
explicit __ fastcall kanal (const std :: string & name):
structelem (name), obyavZayav (name), obrabotzayavok (name)
{
__ DlinObslujZayav = 0;
}
~ kanal () {}
protected:
// поведінка
virtual void _GenerateVremyaVidachi () {//час виходу заявки
if (_ObrZayavka! = 0) {
try {//контроль засобів користувача
__DlinObslujZayav = _VremyaVidachi = randomgenerator :: Poluchznach ();
}
}
virtual Zayavka * __ fastcall _Peredacha (Zayavka *) {//видача обслужених заявки
Zayavka * tmpObrZayavka = _ObrZayavka;
_ObrZayavka = 0;
if (tmpObrZayavka! = NULL && this-> _marksObrZayav)
tmpObrZayavka-> SetObrabot ();// заявка оброблена
return tmpObrZayavka;
}
virtual void __ fastcall _Priemnik (Zayavka * req) {//прийом заявки
_OprVremyaVidachi = false;
if (_ObrZayavka! = 0)
_ObrZayavka = req;
}
private:
size_t __ DlinObslujZayav;// зберігає тривалість обслуговування заявки
// для розрахунку завантаження каналу
}; class klapan: public peredatchik, public priemnik, public objectupr
{public:
// конструктор і деструктор
explicit __ fastcall klapan (const std :: string & name, funcupr_t pfuncupr NachFuncUpr):
structelem (name), objectupr (name, pfuncupr), obyavZayav (name),
priemnik (name), peredatchik (name)
{
__ tmpObrZayav = 0;
}
~ klapan () {}
protected:
// поведінка
virtual void __ fastcall _Priem (Zayavka * ObrZayavka)// прийняти заявку
{__tmpObrZayav = ObrZayav;
}
virtual Zayavka * __ fastcall _Peredacha (Zayavka *)// передати заявку
{Zayavka * tmObrZayav = __ tmObrZayav; __ tmpObrZayav = 0;
if (this-> _marksObrZayav) tmObrZayav-> SetObrabot ();
// клапани теж можуть позначати заявки як оброблені
return tmObrZayav;
}
// інформація
virtual bool _GotovKPriem () const {//готовність до пр...