00001 #ifndef EDG_WORKLOAD_COMMON_LOGGER_CONTAINER_TS_H
00002 #define EDG_WORKLOAD_COMMON_LOGGER_CONTAINER_TS_H
00003
00004 #include <boost/thread/mutex.hpp>
00005 #include <boost/thread/tss.hpp>
00006
00007 #include "common.h"
00008
00009 COMMON_NAMESPACE_BEGIN {
00010
00011 namespace logger {
00012
00013 class DataContainerMulti : public DataContainerImpl {
00014 public:
00015 DataContainerMulti( const char *format );
00016 ~DataContainerMulti( void );
00017
00018
00019 virtual void date( bool d );
00020 virtual void multiline( bool d, const char *prefix );
00021 virtual void next_level( level_t lev );
00022 virtual void time_format( const char *format );
00023 virtual void function( const char *func );
00024 virtual void clear_function( void );
00025
00026
00027 virtual bool date( void ) const;
00028 virtual bool multiline( void ) const;
00029 virtual level_t next_level( void ) const;
00030 virtual const std::string &time_format( void ) const;
00031 virtual const std::string &function( void ) const;
00032 virtual const std::string &multiline_prefix( void ) const;
00033 virtual bool current_tid(std::string &tid) const;
00034
00035
00036 virtual bool date( void );
00037 virtual bool multiline( void );
00038 virtual level_t next_level( void );
00039 virtual const std::string &time_format( void );
00040 virtual const std::string &function( void );
00041 virtual const std::string &multiline_prefix( void );
00042 virtual bool current_tid(std::string &tid);
00043
00044 private:
00045 struct data_s {
00046 data_s( const DataContainerSingle &dcs );
00047
00048 const std::string current_tid( void );
00049
00050 bool d_date, d_multiline;
00051 level_t d_next;
00052 std::string d_format, d_function, d_multiprefix;
00053
00054 static unsigned long int d_next_tid;
00055 static boost::mutex d_tid_mutex;
00056 static boost::thread_specific_ptr<unsigned long int> d_current_tid;
00057 };
00058
00059 inline void createData( void ) const
00060 { if( this->dcm_data.get() == NULL ) this->dcm_data.reset( new data_s(this->dcm_single) ); return; }
00061
00062 mutable boost::thread_specific_ptr<data_s> dcm_data;
00063 DataContainerSingle dcm_single;
00064 };
00065
00066 };
00067
00068 } COMMON_NAMESPACE_END;
00069
00070 #endif
00071
00072
00073
00074