00001 #ifndef EDG_WORKLOAD_COMMON_LOGGER_MANIPULATORS_H
00002 #define EDG_WORKLOAD_COMMON_LOGGER_MANIPULATORS_H
00003
00004 #include <iostream>
00005 #include <string>
00006
00007 #include "edg/workload/common/common_namespace.h"
00008
00009 #include "common.h"
00010
00011 COMMON_NAMESPACE_BEGIN {
00012
00013 namespace logger {
00014
00015 class Logbuf;
00016 namespace threadsafe { class logstream; };
00017
00018 class StatePusher {
00019 public:
00020 StatePusher( std::ostream &os, const char *func = NULL );
00021 StatePusher( std::ostream &os, const std::string &func );
00022 StatePusher( threadsafe::logstream &os, const char *func = NULL );
00023 StatePusher( threadsafe::logstream &os, const std::string &func );
00024 ~StatePusher( void );
00025
00026 private:
00027 void setState( const char *func );
00028
00029 StatePusher( const StatePusher &fp );
00030 StatePusher &operator=( const StatePusher &fp );
00031
00032 Logbuf *fp_buffer;
00033 DataContainerSingle fp_data;
00034 };
00035
00036 #ifndef LOGGER_FUTURE_IMPLEMENTATION
00037 class setfunction {
00038 friend std::ostream &operator<<( std::ostream &os, const setfunction &sf );
00039 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const setfunction &sf );
00040
00041 public:
00042 setfunction( const char *func );
00043 setfunction( const std::string &func );
00044
00045 private:
00046 std::string sf_function;
00047 };
00048 #endif
00049
00050 class settimeformat {
00051 friend std::ostream &operator<<( std::ostream &os, const settimeformat &sf );
00052 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const settimeformat &sf );
00053
00054 public:
00055 settimeformat( const char *format );
00056 settimeformat( const std::string &func );
00057
00058 private:
00059 std::string stf_format;
00060 };
00061
00062 class setlevel {
00063 friend std::ostream &operator<<( std::ostream &os, const setlevel &sf );
00064 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const setlevel &sf );
00065
00066 public:
00067 setlevel( level_t lev );
00068
00069 private:
00070 level_t sl_level;
00071 };
00072
00073 class setcurrent {
00074 friend std::ostream &operator<<( std::ostream &os, const setcurrent &sf );
00075 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const setcurrent &sf );
00076
00077 public:
00078 setcurrent( level_t lev );
00079
00080 private:
00081 level_t sc_level;
00082 };
00083
00084 class setmultiline {
00085 friend std::ostream &operator<<( std::ostream &os, const setmultiline &sm );
00086 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const setmultiline &sm );
00087
00088 public:
00089 setmultiline( bool multi, const char *prefix = NULL );
00090
00091 private:
00092 bool sm_multi;
00093 const char *sm_prefix;
00094 };
00095
00096 class setshowseverity {
00097 friend std::ostream &operator<<( std::ostream &os, const setshowseverity &ss );
00098 friend threadsafe::logstream &operator<<( threadsafe::logstream &os, const setshowseverity &ss );
00099
00100 public:
00101 setshowseverity( bool show );
00102
00103 private:
00104 bool ss_show;
00105 };
00106
00107 #ifndef LOGGER_FUTURE_IMPLEMENTATION
00108 std::ostream &operator<<( std::ostream &os, const setfunction &sf );
00109 #endif
00110 std::ostream &operator<<( std::ostream &os, const settimeformat &stf );
00111 std::ostream &operator<<( std::ostream &os, const setlevel &sl );
00112 std::ostream &operator<<( std::ostream &os, const setcurrent &sc );
00113 std::ostream &operator<<( std::ostream &os, const setmultiline &sc );
00114
00115 #ifndef LOGGER_FUTURE_IMPLEMENTATION
00116 threadsafe::logstream &operator<<( threadsafe::logstream &os, const setfunction &sf );
00117 #endif
00118 threadsafe::logstream &operator<<( threadsafe::logstream &os, const settimeformat &sf );
00119 threadsafe::logstream &operator<<( threadsafe::logstream &os, const setlevel &sf );
00120 threadsafe::logstream &operator<<( threadsafe::logstream &os, const setcurrent &sf );
00121 threadsafe::logstream &operator<<( threadsafe::logstream &os, const setmultiline &sf );
00122
00123 };
00124
00125 } COMMON_NAMESPACE_END;
00126
00127 #endif
00128
00129
00130
00131