See
- The implementation simlogger.cpp
- The description Loggers
<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>