#pragma once
#ifndef CLoggerMessageData_h
#define CLoggerMessageData_h
#include <list>
#include <sys/timeb.h>
#include "CMessageData.h"
#include "AObjectRetentionClass.h"
namespace CoreFW
{
typedef enum _EnumLogLevelType
{
LOG_LEVEL_NONE = 0,
LOG_LEVEL_ERR = 1,
LOG_LEVEL_WRN = 2,
LOG_LEVEL_ERR_WRN = 3,
LOG_LEVEL_STEP = 4,
LOG_LEVEL_INFO = 5,
LOG_LEVEL_ALL = LOG_LEVEL_INFO,
} EnumLogLevelType ;
class CORE_DLL_DECLARATION_SPECIFIER CLoggerMessageData : public CMessageData, public AObjectRetentionClass
{
friend class CPoolObject<CLoggerMessageData> ;
protected:
CLoggerMessageData() ;
CLoggerMessageData( const CLoggerMessageData &LoggerMessageData ) ;
virtual ~CLoggerMessageData() ;
CLoggerMessageData& operator=( const CLoggerMessageData &LoggerMessageData ) ;
public:
const char* GetLogMessage() const ;
void SetLogMessage( const char *strLogMessage ) ;
void SetLogMessageAddress( char *pstrLogMessage, const size_t LogMessageLength ) ;
EnumLogLevelType GetLogLevelType() const ;
void SetLogLevelType( EnumLogLevelType eLogLevelType ) ;
unsigned long GetLogID() const ;
void SetLogID( unsigned long ulLogID ) ;
const _timeb& GetLogMessageReceivedTime() const ;
void SetLogMessageReceivedTime( const _timeb &tLogMessageReceiveTime ) ;
const _timeb& GetLogObjectCreationTime() const ;
void SetLogObjectCreationTime( const _timeb &tLogObjectCreationTime ) ;
unsigned long GetThreadID() const ;
void SetThreadID( unsigned long ulThreadID ) ;
static CLoggerMessageData* GetAvailable( unsigned long ulLogID, EnumLogLevelType eLogLevelType,
const char *strLogMessage, const _timeb &tLogMessageReceiveTime,
unsigned long ulThreadID ) ;
static CLoggerMessageData* GetAvailable( unsigned long ulLogID, EnumLogLevelType eLogLevelType,
char *pstrLogMessageAddress, const size_t LogMessageLength,
const _timeb &tLogMessageReceiveTime, unsigned long ulThreadID ) ;
void Release() ;
AMessageData* Copy() ;
AMessageData* DeepCopy() ;
public:
static std::string GetLogLevelTypeString( EnumLogLevelType eLogLevelType, const std::string &strLogLevelAllString = "ALL" ) ;
private:
void DeallocateObject() ;
private:
void ReleaseParameters() ;
void ReleaseCLoggerMessageData() ;
void CopyCLoggerMessageData( const CLoggerMessageData &LoggerMessageData ) ;
protected:
static CLoggerMessageData* GetAvailable() ;
private:
unsigned long m_ulLogID ;
EnumLogLevelType m_eLogLevelType ;
_timeb m_tLogMessageReceivedTime ;
unsigned long m_ulThreadID ;
_timeb m_tLogObjectCreationTime ;
} ;
typedef std::list< CLoggerMessageData* > TCLoggerMessageDataList ;
inline const _timeb& CLoggerMessageData::GetLogMessageReceivedTime() const
{
return m_tLogMessageReceivedTime ;
}
inline void CLoggerMessageData::SetLogMessageReceivedTime( const _timeb &tLogMessageReceivedTime )
{
m_tLogMessageReceivedTime = tLogMessageReceivedTime ;
}
inline const _timeb& CLoggerMessageData::GetLogObjectCreationTime() const
{
return m_tLogObjectCreationTime ;
}
inline void CLoggerMessageData::SetLogObjectCreationTime( const _timeb &tLogObjectCreationTime )
{
m_tLogObjectCreationTime = tLogObjectCreationTime ;
}
inline const char* CLoggerMessageData::GetLogMessage() const
{
return ( const char* ) GetData() ;
}
inline void CLoggerMessageData::SetLogMessage( const char *strLogMessage )
{
SetData( strLogMessage, ( strLogMessage ? strlen( strLogMessage ) : 0 ) ) ;
}
inline void CLoggerMessageData::SetLogMessageAddress( char *pstrLogMessage, const size_t LogMessageLength )
{
SetDataAddress( pstrLogMessage, ( pstrLogMessage ? LogMessageLength : 0 ) ) ;
}
inline EnumLogLevelType CLoggerMessageData::GetLogLevelType() const
{
return m_eLogLevelType ;
}
inline void CLoggerMessageData::SetLogLevelType( EnumLogLevelType eLogLevelType )
{
m_eLogLevelType = eLogLevelType ;
}
inline unsigned long CLoggerMessageData::GetLogID() const
{
return m_ulLogID ;
}
inline void CLoggerMessageData::SetLogID( unsigned long ulLogID )
{
m_ulLogID = ulLogID ;
}
inline unsigned long CLoggerMessageData::GetThreadID() const
{
return m_ulThreadID ;
}
inline void CLoggerMessageData::SetThreadID( unsigned long ulThreadID )
{
m_ulThreadID = ulThreadID ;
}
} // End namespace
#endif