diff options
Diffstat (limited to 'plugins/MirFox/src/MirFoxCommons/MirFoxCommons_logger.cpp')
-rw-r--r-- | plugins/MirFox/src/MirFoxCommons/MirFoxCommons_logger.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/plugins/MirFox/src/MirFoxCommons/MirFoxCommons_logger.cpp b/plugins/MirFox/src/MirFoxCommons/MirFoxCommons_logger.cpp new file mode 100644 index 0000000000..c9c50a4b8a --- /dev/null +++ b/plugins/MirFox/src/MirFoxCommons/MirFoxCommons_logger.cpp @@ -0,0 +1,115 @@ +#include "MirFoxCommons_pch.h"
+#include "MirFoxCommons_logger.h"
+
+
+/*static*/ MFLogger * MFLogger::m_pOnlyOneInstance;
+
+
+MFLogger::MFLogger()
+{
+ logFunction = NULL;
+ memcpy(m_prefix, L" ", PREFIX_SIZE * sizeof(m_prefix[0]));
+}
+
+
+void
+MFLogger::initLogger(LogFunction logFunction_p){
+
+ logFunction = logFunction_p;
+ InitializeCriticalSection(&logCs);
+
+}
+
+void
+MFLogger::set6CharsPrefix(const wchar_t* prefix){
+ size_t len = wcslen(prefix);
+ memcpy(m_prefix, L" ", PREFIX_SIZE * sizeof(m_prefix[0]));
+ memcpy(m_prefix, prefix, len * sizeof(wchar_t));
+}
+
+
+void
+MFLogger::releaseLogger(){
+
+ logFunction = NULL;
+ DeleteCriticalSection(&logCs);
+
+}
+
+
+void
+MFLogger::log(const wchar_t* szText){
+
+ size_t len = wcslen(szText) + 1;
+ wchar_t* buffer = new wchar_t[(PREFIX_SIZE + len) * sizeof(wchar_t)];
+ memcpy(buffer, m_prefix, PREFIX_SIZE * sizeof(m_prefix[0]));
+ memcpy(buffer + PREFIX_SIZE , szText, len * sizeof(wchar_t));
+ log_int(buffer);
+ delete buffer;
+
+}
+
+
+void
+MFLogger::log_p(const wchar_t* szText, ...){
+
+ va_list args;
+ va_start(args, szText);
+ int len = (PREFIX_SIZE + _vscwprintf(szText, args ) + 1); // _vscprintf doesn't count terminating '\0'
+ wchar_t* buffer = new wchar_t[len * sizeof(wchar_t)];
+ vswprintf_s(buffer + PREFIX_SIZE, len, szText, args);
+ va_end(args);
+ memcpy(buffer, m_prefix, PREFIX_SIZE * sizeof(m_prefix[0]));
+ log_int(buffer);
+ delete buffer;
+
+}
+
+
+void
+MFLogger::log_d(const wchar_t* szText){
+
+ #ifdef _DEBUG
+ size_t len = wcslen(szText) + 1;
+ wchar_t* buffer = new wchar_t[(PREFIX_SIZE + len) * sizeof(wchar_t)];
+ memcpy(buffer, m_prefix, PREFIX_SIZE * sizeof(m_prefix[0]));
+ memcpy(buffer + PREFIX_SIZE , szText, len * sizeof(wchar_t));
+ log_int(buffer);
+ delete buffer;
+ #endif //_DEBUG
+
+}
+
+
+void
+MFLogger::log_dp(const wchar_t* szText, ...){
+
+ #ifdef _DEBUG
+ va_list args;
+ va_start(args, szText);
+ int len = (PREFIX_SIZE + _vscwprintf(szText, args ) + 1); // _vscprintf doesn't count terminating '\0'
+ wchar_t* buffer = new wchar_t[len * sizeof(wchar_t)];
+ vswprintf_s(buffer + PREFIX_SIZE, len, szText, args);
+ va_end(args);
+ memcpy(buffer, m_prefix, PREFIX_SIZE * sizeof(m_prefix[0]));
+ log_int(buffer);
+ delete buffer;
+ #endif //_DEBUG
+
+}
+
+
+void
+MFLogger::log_int(const wchar_t* szText){
+
+ if (!logFunction){
+ return;
+ }
+
+ EnterCriticalSection(&logCs);
+ (*logFunction)(szText);
+ LeaveCriticalSection(&logCs);
+
+}
+
+
|