From 2064113c9d9f81acb851b974a21a5f9170dfe9e2 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 24 Oct 2007 17:55:29 +0000 Subject: [PATCH] slightly simplified wxLog repetition counting code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/log.h | 14 +++++++------- src/common/log.cpp | 37 ++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/include/wx/log.h b/include/wx/log.h index 254df43702..adab3ceb5b 100644 --- a/include/wx/log.h +++ b/include/wx/log.h @@ -301,20 +301,20 @@ protected: #define wxSUPPRESS_DOLOGSTRING_HIDE_WARNING() #endif - // log a line containing the number of times the previous message was - // repeated - // returns: the number - static unsigned DoLogNumberOfRepeats(); + // log a message indicating the number of times the previous message was + // repeated; only does something if ms_prevCounter > 0 + static void LogLastRepetitionCountIfNeeded(); private: // static variables // ---------------- - // traditional behaviour or counting repetitions + // if true, don't log the same message multiple times, only log it once + // with the number of times it was repeated static bool ms_bRepetCounting; + static wxString ms_prevString; // previous message that was logged - // how many times the previous message was logged - static unsigned ms_prevCounter; + static unsigned ms_prevCounter; // how many times it was repeated static time_t ms_prevTimeStamp;// timestamp of the previous message static wxLogLevel ms_prevLevel; // level of the previous message diff --git a/src/common/log.cpp b/src/common/log.cpp index 89ed1264fc..03d6f0adf4 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -458,11 +458,10 @@ void WXDLLEXPORT wxVLogSysError(unsigned long err, const wxString& format, va_li // ---------------------------------------------------------------------------- /* static */ -unsigned wxLog::DoLogNumberOfRepeats() +void wxLog::LogLastRepetitionCountIfNeeded() { - long retval = ms_prevCounter; wxLog *pLogger = GetActiveTarget(); - if ( pLogger && ms_prevCounter > 0 ) + if ( pLogger && ms_prevCounter ) { wxString msg; #if wxUSE_INTL @@ -471,23 +470,18 @@ unsigned wxLog::DoLogNumberOfRepeats() ms_prevCounter), ms_prevCounter); #else - msg.Printf(wxT("The previous message was repeated.")); + msg.Printf(wxT("The previous message was repeated %lu times."), + ms_prevCounter); #endif ms_prevCounter = 0; ms_prevString.clear(); pLogger->DoLog(ms_prevLevel, msg, ms_prevTimeStamp); } - return retval; } wxLog::~wxLog() { - if ( ms_prevCounter > 0 ) - { - // looks like the repeat count has not been logged yet, - // so let's do it now - wxLog::DoLogNumberOfRepeats(); - } + LogLastRepetitionCountIfNeeded(); } /* static */ @@ -498,21 +492,26 @@ void wxLog::OnLog(wxLogLevel level, const wxString& szString, time_t t) wxLog *pLogger = GetActiveTarget(); if ( pLogger ) { - if ( GetRepetitionCounting() && ms_prevString == szString ) - { - ms_prevCounter++; - } - else + if ( GetRepetitionCounting() ) { - if ( GetRepetitionCounting() ) + if ( szString == ms_prevString ) { - DoLogNumberOfRepeats(); + ms_prevCounter++; + + // nothing else to do, in particular, don't log the + // repeated message + return; } + + LogLastRepetitionCountIfNeeded(); + + // reset repetition counter for a new message ms_prevString = szString; ms_prevLevel = level; ms_prevTimeStamp = t; - pLogger->DoLog(level, szString, t); } + + pLogger->DoLog(level, szString, t); } } } -- 2.45.2