// carqueue.h: the CarQueue class. #include #include #include "main.h" #include "car.h" #include "carqueue.h" double CarQueue::getEmptyTime () { if (queueSize > 0) return totalEmptyQueueTime; else return totalEmptyQueueTime + sim->simulationTime; } void CarQueue::insert (Car *newestCar) { QueueItem *item = new QueueItem(); item->data = newestCar; item->next = 0; if (lastWaitingCar == 0) { // the queue is empty firstWaitingCar = item; totalEmptyQueueTime += sim->simulationTime; } else { // the queue already had at least one car in it lastWaitingCar->next = item; } lastWaitingCar = item; queueSize += 1; } Car *CarQueue::takeFirstCar () { // precondition: queueSize > 0 && firstWaitingCar != 0 if (queueSize <= 0 || firstWaitingCar == 0) { cout << "Error! car queue unexpectedly empty\n"; return 0; } Car *carToReturn = firstWaitingCar->data; queueSize--; QueueItem *restOfList = firstWaitingCar->next; delete firstWaitingCar; firstWaitingCar = restOfList; if (firstWaitingCar == 0) { // empty queue: update the end of the queue, and start // counting empty queue time lastWaitingCar = 0; totalEmptyQueueTime -= sim->simulationTime; } return carToReturn; }