See

<project-file type=“source”/>

<content> #ifndef SIMLOGGER_H #define SIMLOGGER_H

#include <fstream> #include <simutil.h> #include <list>

class SimAgent; class SimSchedule; class SimLogger { public:

/* constructor */
SimLogger();
/* destructor */
virtual ~SimLogger();
/* log logs a given type of state change of a given runnble at a given time,
this function passes everything onto vlog */
virtual void log(float time, SimAgent *agent, SimSchedule *event) = 0;

};

class SimEventLogger {

  public:
virtual bool loggable(SimSchedule *event) const = 0;
virtual void log(std::ostream &, float time, const SimAgent *, const SimSchedule*) const = 0;

};

class SimStreamLogger : public SimLogger {

  public:
SimStreamLogger(std::ostream &);
virtual ~SimStreamLogger();
virtual void log(float time, SimAgent *agent, SimSchedule *event);
static void registerEventLogger(SimEventLogger*);
static void unregisterEventLogger(SimEventLogger*); 
std::ostream& stream() { return Stream; }
  protected:
std::ostream &Stream;
static std::list<SimEventLogger*> EventLoggers;

};

class SimFileLogger : public SimStreamLogger {

  public:
SimFileLogger(const char *filename);
virtual ~SimFileLogger();
  protected:
std::ofstream FStream;

};

class SimConditionalLogger : public SimLogger {

  public:
/* constructor */
SimConditionalLogger(SimLogger *truepipe, SimLogger *falsepipe);
virtual ~SimConditionalLogger();
virtual bool condition(float time, SimAgent *owner, SimSchedule *event) = 0;
virtual void log(float time, SimAgent *agent, SimSchedule *event);
  protected:
SimLogger *TruePipe;
SimLogger *FalsePipe;

};

class SimLoggerList : public SimLogger {

  public:
/* add a logger into the list */
void addLogger(SimLogger *);
/* add a logger into the list */
void removeLogger(SimLogger *);
/* constructor */
SimLoggerList();
/* destructor */
virtual ~SimLoggerList();
virtual void log(float time, SimAgent *owner, SimSchedule *event);
  protected:
std::list<SimLogger *> Loggers; 

}; #endif

</content>