#include "wx/defs.h"
-#if wxUSE_THREADS
- class WXDLLIMPEXP_FWD_BASE wxCriticalSection;
-#endif
-
// ----------------------------------------------------------------------------
// common constants for use in wxUSE_LOG/!wxUSE_LOG
// ----------------------------------------------------------------------------
#include "wx/arrstr.h"
+#ifndef __WXPALMOS5__
#ifndef __WXWINCE__
#include <time.h> // for time_t
#endif
+#endif // ! __WXPALMOS5__
#include "wx/dynarray.h"
static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; }
// add string trace mask
- static void AddTraceMask(const wxString& str)
- { ms_aTraceMasks.push_back(str); }
+ static void AddTraceMask(const wxString& str);
// add string trace mask
static void RemoveTraceMask(const wxString& str);
// remove all string trace masks
static void ClearTraceMasks();
- // get string trace masks
- static const wxArrayString &GetTraceMasks() { return ms_aTraceMasks; }
+ // get string trace masks: note that this is MT-unsafe if other threads can
+ // call AddTraceMask() concurrently
+ static const wxArrayString& GetTraceMasks() { return ms_aTraceMasks; }
// sets the time stamp string format: this is used as strftime() format
// string for the log targets which add time stamps to the messages; set
// log a message indicating the number of times the previous message was
// repeated if ms_prevCounter > 0, does nothing otherwise; return the old
// value of ms_prevCounter
- unsigned LogLastRepetitionCountIfNeeded();
+ unsigned LogLastRepeatIfNeeded();
private:
+ // implement of LogLastRepeatIfNeeded(): it assumes that the
+ // caller had already locked ms_prevCS
+ unsigned LogLastRepeatIfNeededUnlocked();
+
// static variables
// ----------------
// with the number of times it was repeated
static bool ms_bRepetCounting;
-#if wxUSE_THREADS
- static wxCriticalSection ms_prevCS; // protects the ms_prev values below
-#endif
static wxString ms_prevString; // previous message that was logged
static unsigned ms_prevCounter; // how many times it was repeated
static time_t ms_prevTimeStamp;// timestamp of the previous message
private:
wxString m_str;
- DECLARE_NO_COPY_CLASS(wxLogBuffer)
+ wxDECLARE_NO_COPY_CLASS(wxLogBuffer);
};
{
public:
// redirect log output to a FILE
- wxLogStderr(FILE *fp = (FILE *) NULL);
+ wxLogStderr(FILE *fp = NULL);
protected:
// implement sink function
FILE *m_fp;
- DECLARE_NO_COPY_CLASS(wxLogStderr)
+ wxDECLARE_NO_COPY_CLASS(wxLogStderr);
};
#if wxUSE_STD_IOSTREAM
// do we pass the messages to the old logger?
bool m_bPassMessages;
- DECLARE_NO_COPY_CLASS(wxLogChain)
+ wxDECLARE_NO_COPY_CLASS(wxLogChain);
};
// a chain log target which uses itself as the new logger
wxLogInterposer();
private:
- DECLARE_NO_COPY_CLASS(wxLogInterposer)
+ wxDECLARE_NO_COPY_CLASS(wxLogInterposer);
};
// a temporary interposer which doesn't destroy the old log target
wxLogInterposerTemp();
private:
- DECLARE_NO_COPY_CLASS(wxLogInterposerTemp)
+ wxDECLARE_NO_COPY_CLASS(wxLogInterposerTemp);
};
#if wxUSE_GUI
// empty functions if their parameters are complicated enough, but by
// defining them as an empty inline function we ensure that even dumbest
// compilers optimise them away
+#ifdef __BORLANDC__
+ // but Borland gives "W8019: Code has no effect" for wxLogNop() so we need
+ // to define it differently for it to avoid these warnings (same problem as
+ // with wxUnusedVar())
+ #define wxLogNop() { }
+#else
inline void wxLogNop() { }
+#endif
#define wxVLogDebug(fmt, valist) wxLogNop()
#define wxVLogTrace(mask, fmt, valist) wxLogNop()