// evlist.C: the EventList class.

#include <iostream.h>
#include "evlist.h"

void EventList::insert (Event *e) {
   // Create the item to go on the event list.
   ListItem *item = new ListItem();
   item->data = e;
   
   // Find the appropriate place for the item in the event list,
   // and put it there.
   const double time = e->getTime();
   if (firstEvent == 0 || time < firstEvent->data->getTime()) {
      item->next = firstEvent;
      firstEvent = item;
   }
   else {
      ListItem *behind = firstEvent;
      ListItem *ahead = firstEvent->next;
      while (ahead != 0 && ahead->data->getTime() <= time) {
         behind = ahead;
         ahead = ahead->next;
      }
      behind->next = item;
      item->next = ahead;
   }      
}

Event *EventList::takeNextEvent () {
   // precondition: firstEvent != null
   if (firstEvent == 0) {
      cerr << "Error! ran out of events\n";
      return 0;
   }
   
   Event *eventToReturn = firstEvent->data;

   ListItem *restOfList = firstEvent->next;
   delete firstEvent;
   firstEvent = restOfList;

   return eventToReturn;    
}
