Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

container_ts.h

Go to the documentation of this file.
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   // Setters
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   // Constant extractors
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   // Extractors
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 }; // Namespace logger
00067 
00068 } COMMON_NAMESPACE_END;
00069 
00070 #endif /* EDG_WORKLOAD_COMMON_LOGGER_CONTAINER_TS_H */
00071 
00072 // Local Variables:
00073 // mode: c++
00074 // End:

Generated on Wed Mar 1 00:37:54 2006 for COMMON API - configuration, jobid, ldif2classadi, logger, process, requestad, socket++i, task, utilities by doxygen 1.3.5