diff --git a/aegisub/libaegisub/common/log.cpp b/aegisub/libaegisub/common/log.cpp index 95ec093f5..afb970449 100644 --- a/aegisub/libaegisub/common/log.cpp +++ b/aegisub/libaegisub/common/log.cpp @@ -110,10 +110,10 @@ LogSink::~LogSink() { void LogSink::log(SinkMessage *sm) { sink.push_back(sm); - std::for_each( + for_each( emitters.begin(), emitters.end(), - std::bind2nd(std::mem_fun(&Emitter::log), sm)); + bind2nd(std::mem_fun(&Emitter::log), sm)); } void LogSink::Subscribe(Emitter *em) { @@ -122,8 +122,9 @@ void LogSink::Subscribe(Emitter *em) { } void LogSink::Unsubscribe(Emitter *em) { - emitters.erase(std::remove(emitters.begin(), emitters.end(), em), emitters.end()); - LOG_D("agi/log/emitter/unsubscribe") << "Un-Ssubscribe: " << this; + emitters.erase(remove(emitters.begin(), emitters.end(), em), emitters.end()); + delete em; + LOG_D("agi/log/emitter/unsubscribe") << "Un-Subscribe: " << this; } Message::Message(const char *section, @@ -146,21 +147,5 @@ Message::~Message() { agi::log::log->log(sm); } -Emitter::Emitter() { -} - -Emitter::~Emitter() { - Disable(); -} - -void Emitter::Enable() { - agi::log::log->Subscribe(this); -} - -void Emitter::Disable() { - agi::log::log->Unsubscribe(this); -} - - } // namespace log } // namespace agi diff --git a/aegisub/libaegisub/include/libaegisub/log.h b/aegisub/libaegisub/include/libaegisub/log.h index ebc8a71f2..1068963a2 100644 --- a/aegisub/libaegisub/include/libaegisub/log.h +++ b/aegisub/libaegisub/include/libaegisub/log.h @@ -107,7 +107,7 @@ class LogSink { /// Log sink Sink sink; - /// List of function pointers to emitters + /// List of pointers to emitters std::vector emitters; /// Init time for log writing purposes. @@ -116,7 +116,6 @@ class LogSink { /// Directory to place logfiles. const std::string dir_log; - public: /// Constructor /// @param dir_log Directory to place log files. @@ -128,12 +127,14 @@ public: /// Insert a message into the sink. void log(SinkMessage *sm); - /// @brief Subscribe an emitter. + /// @brief Subscribe an emitter /// @param em Emitter to add + /// + /// LogSink takes ownership of the passed emitter void Subscribe(Emitter *em); - /// @brief Unsubscribe an emitter. - /// @param em Emitter to remove + /// @brief Unsubscribe and delete an emitter + /// @param em Emitter to delete void Unsubscribe(Emitter *em); /// @brief @get the complete (current) log. @@ -144,23 +145,13 @@ public: /// An emitter to produce human readable output for a log sink. class Emitter { public: - /// Constructor - Emitter(); - /// Destructor - virtual ~Emitter(); - - /// Enable (subscribe) - void Enable(); - - /// Disable (unsubscribe) - void Disable(); + virtual ~Emitter() { } /// Accept a single log entry virtual void log(SinkMessage *sm)=0; }; - /// Generates a message and submits it to the log sink. class Message { const int len; diff --git a/aegisub/src/main.cpp b/aegisub/src/main.cpp index bbe70174b..17f0baf4a 100644 --- a/aegisub/src/main.cpp +++ b/aegisub/src/main.cpp @@ -146,10 +146,8 @@ bool AegisubApp::OnInit() { wxFileName::Mkdir(path_log, 0777, wxPATH_MKDIR_FULL); agi::log::log = new agi::log::LogSink(STD_STR(path_log)); - #ifdef _DEBUG - emit_stdout = new agi::log::EmitSTDOUT(); - emit_stdout->Enable(); + agi::log::log->Subscribe(new agi::log::EmitSTDOUT()); #endif // Set config file @@ -305,10 +303,6 @@ int AegisubApp::OnExit() { AssExportFilterChain::Clear(); -#ifdef _DEBUG - delete emit_stdout; -#endif - // Keep this last! delete agi::log::log; diff --git a/aegisub/src/main.h b/aegisub/src/main.h index a0027eee4..da35a13b7 100644 --- a/aegisub/src/main.h +++ b/aegisub/src/main.h @@ -54,13 +54,6 @@ class FrameMain; class PluginManager; -#ifdef _DEBUG -namespace agi { - namespace log { - class EmitSTDOUT; - } -} -#endif /// For holding all configuration-related objects and values. namespace config { @@ -100,11 +93,6 @@ class AegisubApp: public wxApp { /// DOCME PluginManager *plugins; -#ifdef _DEBUG - /// stdout log emitter - agi::log::EmitSTDOUT *emit_stdout; -#endif - bool OnInit(); int OnExit(); int OnRun();