#include "simul.h" /* * member functions for event queue */ eventQClass::eventQClass() // constructor { head = NULL; tail = NULL; count = 0; } boolean eventQClass::Empty() // check if empty { if (head == NULL) return TRUE; else return FALSE; } void eventQClass::Enqueue(eventClass event) // this queue is maintained as a priority queue { eventClass *temp, *search; count ++; temp = new eventClass; // create a new node (*temp) = event; temp->next = NULL; temp->prev = NULL; if (Empty() == TRUE) // only one node { head = temp; tail = temp; } else if ((head->eventtime > temp->eventtime)) // insert before { temp->next = head; temp->prev = head->prev; head->prev = temp; head = temp; } else // find a proper place (according to time) { search = head; while ((search != NULL) && (search->eventtime <= temp->eventtime)) search = search->next; if (search != NULL) { temp->next = search; temp->prev = search->prev; search->prev->next = temp; search->prev = temp; } else // insert after the end { tail->next = temp; temp->prev = tail; tail = temp; } } } eventClass eventQClass::Front() // this if for event queue { if (Empty() == TRUE) { cerr << "event queue empty when front \n"; exit(1); } return *(head); } void eventQClass::Dequeue() // delete one element from queue { eventClass *temp; if (Empty() == TRUE) { cerr << "event queue empty when dequeue \n"; exit(1); } else { temp = head; head = head->next; delete temp; } } int eventQClass::Length() // print the length of the event queue // used for debug only { return count; }