See

<project-file type=“source”/>

<content> #include “simagent.h” #include “simprocess.h”

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

SimQuitEvent::SimQuitEvent(float time)

  : SimSchedule(time)

{ }

SimQuitEvent::~SimQuitEvent() { }

void SimQuitEvent::handler(float Time, SimProcess *process) {

  if (process != NULL) process->quit();

}

SimProcess::SimProcess(std::ostream &log) : SimAgent(0), Logger(log) { }

SimProcess::~SimProcess() { }

void SimProcess::run() {

  Time=0;
  Quit=false;
  while (!Quit) {
float time = eventTime();
if (time > Time)
    Time = time;
      handler(Time, this);
idle();
  }

}

void SimProcess::quit() {

  Quit=true;

}

void SimProcess::idle() { }

void SimProcess::registerAgent(SimAgent *agent) {

  if (agent == NULL) return;
  std::map<SimID, SimAgent*>::iterator i=RegisteredAgents.find(agent->id());
  if (i != RegisteredAgents.end())
i->second = agent;
  else
RegisteredAgents[agent->id()] = agent;

}

void SimProcess::unregisterAgent(SimAgent *agent) {

  if (agent == NULL) return;
  std::map<SimID, SimAgent*>::iterator i=RegisteredAgents.find(agent->id());
  if (i != RegisteredAgents.end())
RegisteredAgents.erase(i);

}

SimAgent *SimProcess::agentWithID(const SimID &id) {

  std::map<SimID, SimAgent*>::iterator i=RegisteredAgents.find(id);
  if (i != RegisteredAgents.end())
return i->second;
  return NULL;

}

void SimProcess::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 SimProcess::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 SimProcess::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(this, time, agent, event);

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