See

<project-file type=“source”/>

<content> #include <simlogger.h>

SimLogger::SimLogger() { }

SimLogger::~SimLogger() { }

std::list<SimEventLogger*> SimStreamLogger::EventLoggers;

SimStreamLogger::SimStreamLogger(std::ostream &stream) : Stream(stream) { }

SimStreamLogger::~SimStreamLogger() { }

void SimStreamLogger::registerEventLogger(SimEventLogger *logger) {

  if (logger == NULL) return;
  std::list<SimEventLogger*>::iterator i;
  for (i = EventLoggers.begin(); i != EventLoggers.end() && *i != logger; i++);
  if (i == EventLoggers.end())
EventLoggers.push_back(logger);

}

void SimStreamLogger::unregisterEventLogger(SimEventLogger *logger) {

  if (logger == NULL) return;
  std::list<SimEventLogger*>::iterator i;
  for (i = EventLoggers.begin(); i != EventLoggers.end() && *i != logger; i++);
  if (i != EventLoggers.end())
EventLoggers.erase(i);

}

void SimStreamLogger::log(float time, SimAgent *agent, SimSchedule *event) {

  std::list<SimEventLogger*>::iterator i;
  for (i = EventLoggers.begin(); i != EventLoggers.end(); i++)
if ((*i)->loggable(event))
    (*i)->log(Stream, time, agent, event);

}

SimFileLogger::SimFileLogger(const char * FileName) : SimStreamLogger(FStream) {

  FStream.open(FileName);

}

SimFileLogger::~SimFileLogger() {

  FStream.close();

}

SimConditionalLogger::SimConditionalLogger(SimLogger *truepipe, SimLogger *falsepipe) {

  TruePipe = truepipe;
  FalsePipe = falsepipe;

}

SimConditionalLogger::~SimConditionalLogger() {

  if (TruePipe != NULL) delete TruePipe;
  if (FalsePipe != NULL) delete FalsePipe;

}

void SimConditionalLogger::log(float time, SimAgent *agent, SimSchedule *event) {

if (condition(time, agent, event)) {
   if (TruePipe!=NULL) TruePipe->log(time, agent, event);
}
else {
   if (FalsePipe!=NULL) FalsePipe->log(time, agent, event);
}

}

SimLoggerList::SimLoggerList() { }

SimLoggerList::~SimLoggerList() {

  std::list<SimLogger*>::iterator i;
  for (i = Loggers.begin(); i != Loggers.end(); i++)
delete *i;

}

void SimLoggerList::log(float time, SimAgent *agent, SimSchedule *event) {

std::list<SimLogger*>::iterator i;
for (i = Loggers.begin(); i != Loggers.end(); i++)
    (*i)->log(time, agent, event);

}

void SimLoggerList::addLogger(SimLogger *logger) {

  if (logger == NULL) return;
  std::list<SimLogger*>::iterator i;
  for (i = Loggers.begin(); i != Loggers.end() && *i != logger; i++);
  if (i == Loggers.end())
  Loggers.push_back(logger);

}

void SimLoggerList::removeLogger(SimLogger *logger) {

  if (logger == NULL) return;
  std::list<SimLogger*>::iterator i;
  for (i = Loggers.begin(); i != Loggers.end() && *i != logger; i++);
  if (i != Loggers.end())
Loggers.erase(i);

} </content> <use name=“simlogger.h”/>