beautypg.com

HP Integrity NonStop H-Series User Manual

Page 127

background image

enters. When executed, the arrival event creates and installs a new instance of order event. The function
randomInteger() (see

Chapter 2:

Random Access Iterators

) is used to compute a random integer between 1 and

the argument value.

class arriveEvent : public event {
public:
arriveEvent (unsigned int time, unsigned int groupSize)
: event(time), size(groupSize) { }
virtual void processEvent ();
private:
unsigned int size;
};

void arriveEvent::processEvent()
{ // see if everybody can be seated
if (theSimulation.canSeat(size))
theSimulation.scheduleEvent
(new orderEvent(time + 1 + randomInteger(4), size));
}

An order event similarly spawns a leave event.

class orderEvent : public event {
public:
orderEvent (unsigned int time, unsigned int groupSize)
: event(time), size(groupSize) { }
virtual void processEvent ();
private:
unsigned int size;
};

void orderEvent::processEvent()
{ // each person orders some number of scoops
for (int i = 0; i < size; i++)
theSimulation.order(1 + rand(3));
theSimulation.scheduleEvent
(new leaveEvent(time + 1 + randomInteger(10), size));
};

Finally, leave events free up chairs, but do not spawn any new events.

class leaveEvent : public event {
public:
leaveEvent (unsigned int time, unsigned int groupSize)
: event(time), size(groupSize) { }
virtual void processEvent ();
private:
unsigned int size;
};

void leaveEvent::processEvent ()
{ // leave and free up chairs
theSimulation.leave(size);

This manual is related to the following products: