// Driver to test use of Queue #include "Queue.h" #include #include #include using namespace std; // Class representing a customer that can be queued class Customer : public QueueNode { public: Customer(int t) : qtime(t) { number = ++_count; } ostream & print(ostream & o) const { return o << "Customer" << number << " (entered at " << qtime << ")"; } static int count() { return _count; } private: static int _count; // customer counter int number; // customer number int qtime; // "time" enqueued }; int Customer::_count = 0; // Simulate a set of checkout queues, where customers are randomly // assigned to queues, and each customer takes a random amount of time int main(int argc, char * argv[]) { srand(time(NULL)); // Command line args: number of queues, number of customers if (argc != 3) { cerr << "Usage: " << argv[0] << " num_of_queues num_of_customers" << endl; return 1; } const int nqueues = atoi(argv[1]); const int maxcust = atoi(argv[2]); // Allocate some queues Queue *q = new Queue[nqueues]; // Loop, adding a new Customer (up to the max) // or checking someone through, until all are done for (int clock = 1, checked = 0; checked < maxcust; ++clock) { if (rand() % 2 == 0) { // Enqueue a new Customer if (Customer::count() >= maxcust) continue; q[rand() % nqueues].enqueue(new Customer(clock)); } else { // Check someone through QueueNode * qn = q[rand() % nqueues].dequeue(); if (qn == NULL) continue; ++checked; cout << (*qn) << " checked out at " << clock << endl; delete qn; } sleep(1); } delete [] q; return 0; }