#include <iostream.h>

#include <assert.h>
#include "log.h"

Log rclog; //this is it, the log!

void Log::Event (LogEntry *newevent)
{
  newevent->Place (_current);
  newevent->_num = _size;
  _current = newevent;
  _size++;
}

LogEntry *  Log::Last(void) {
  LogEntry* curr = First();
  LogEntry* temp = NULL;
  while (curr) {
    temp = curr;
    curr = curr->_next;
  }
  return temp;
}

LogEntry * Log::getIndexedEntry(int i) 
{
  LogEntry* curr = First();
  int j = 1;
  while (curr) {
    if (j == i)
      return curr;
    else {
      curr = curr->_next;
      j++;
    }
  }
  // something must be broken if it gets here
  cerr << "error in Log::getIndexedEntry" << endl;
  return First();
}

const LogEntry * Log::getNextEvent (LogEvent ev, const LogEntry *entry)
{
  while (entry) {
    if (entry->_event == ev) {
      return entry;
    } else {
      entry = entry->_next;
    }
  }
  return NULL;
}

const LogEntry * Log::getPrevEvent (LogEvent ev, const LogEntry *entry)
{
  while (entry) {
    if (entry->_event == ev) {
      return entry;
    } else {
      entry = entry->_prev;
    }
  }
  return NULL;
}

