21 #ifndef GRT_LOG_HEADER
22 #define GRT_LOG_HEADER
24 #include "GRTTypedefs.h"
26 #ifdef GRT_CXX11_ENABLED
30 #endif //GRT_CXX11_ENABLED
36 Log(std::string proceedingText =
""){
37 setProceedingText(proceedingText);
38 loggingEnabledPtr = NULL;
39 instanceLoggingEnabled =
true;
40 writeProceedingText =
true;
41 writeProceedingTextPtr = &writeProceedingText;
42 lastMessagePtr = &lastMessage;
48 const Log& operator<< (
const T val )
const{
50 #ifdef GRT_CXX11_ENABLED
51 std::unique_lock<std::mutex> lock( logMutex );
54 if( *loggingEnabledPtr && instanceLoggingEnabled ){
55 if( *writeProceedingTextPtr ){
56 *writeProceedingTextPtr =
false;
57 std::cout << proceedingText.c_str();
61 std::stringstream stream;
63 *lastMessagePtr += stream.str();
69 typedef std::basic_ostream<char, std::char_traits<char> > CoutType;
72 typedef CoutType& (*StandardEndLine)(CoutType&);
75 const Log& operator<<(
const StandardEndLine manip)
const{
77 #ifdef GRT_CXX11_ENABLED
78 std::unique_lock<std::mutex> lock( logMutex );
81 if( *loggingEnabledPtr && instanceLoggingEnabled ){
84 *writeProceedingTextPtr =
true;
87 triggerCallback( lastMessage );
94 virtual bool getLoggingEnabled()
const{
return false; }
96 bool getInstanceLoggingEnabled()
const {
return instanceLoggingEnabled; };
98 std::string getProceedingText()
const{
return proceedingText; }
100 virtual std::string getLastMessage()
const{
return lastMessage; }
103 void setProceedingText(
const std::string &proceedingText){
104 if( proceedingText.length() == 0 ) this->proceedingText =
"";
105 else this->proceedingText = proceedingText +
" ";
108 bool setEnableInstanceLogging(
bool loggingEnabled){
109 this->instanceLoggingEnabled = loggingEnabled;
114 virtual void triggerCallback(
const std::string &message )
const{
119 std::string to_str(
const T &val )
const {
125 std::string proceedingText;
126 std::string lastMessage;
127 bool instanceLoggingEnabled;
128 bool *loggingEnabledPtr;
129 bool *writeProceedingTextPtr;
130 std::string *lastMessagePtr;
131 bool writeProceedingText;
133 #ifdef GRT_CXX11_ENABLED
134 static std::mutex logMutex;
140 #endif //GRT_LOG_HEADER