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