00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef _TC_OUTPUT_H_
00036 #define _TC_OUTPUT_H_
00037
00038 #include "TCFactory.h"
00039
00040 namespace TC
00041 {
00058 namespace Output
00059 {
00061 class PrintTarget
00062 {
00063 public:
00064 virtual void Print(const char* text) = 0;
00065
00067 virtual ~PrintTarget() {}
00068 };
00069
00071 typedef SharedPtr<PrintTarget> PrintTargetPtr;
00072
00078 TCBASE_API void SetTraceLevel(sint32 level);
00082 TCBASE_API sint32 GetTraceLevel();
00083
00085 TCBASE_API void SetErrorTarget(PrintTargetPtr error_target);
00087 TCBASE_API void SetWarningTarget(PrintTargetPtr warning_target);
00089 TCBASE_API void SetInfoTarget(PrintTargetPtr info_target);
00091 TCBASE_API void SetTraceTarget(PrintTargetPtr trace_target);
00092
00099 TCBASE_API void Error(const char* module, const char* function,
00100 uint32 line_number, const char* format, ...);
00107 TCBASE_API void Warning(const char* module, const char* function,
00108 uint32 line_number, const char* format, ...);
00115 TCBASE_API void Info(const char* module, const char* function,
00116 uint32 line_number, const char* format, ...);
00125 TCBASE_API void Trace(const char* module, sint32 level, const char* function,
00126 uint32 line_number, const char* format, ...);
00127
00128 }
00129
00134 }
00135
00141 #ifdef _MSC_VER
00142 # define _TC_FUNCTION_ __FUNCTION__
00143 #else
00144 # define _TC_FUNCTION_ __PRETTY_FUNCTION__
00145 #endif
00146
00147 #ifndef TCTRACE_ENABLE
00148 # ifdef DEBUG
00149 # define TCTRACE_ENABLE
00150 # endif
00151 #endif
00152
00153 #ifdef TCTRACE_ENABLE
00154 # define TCTRACE(MODULE, LEVEL, FORMAT) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, FORMAT)
00155 # define TCTRACE1(MODULE, LEVEL, FORMAT, ARG1) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, FORMAT, ARG1)
00156 # define TCTRACE2(MODULE, LEVEL, FORMAT, ARG1, ARG2) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2)
00157 # define TCTRACE3(MODULE, LEVEL, FORMAT, ARG1, ARG2, ARG3) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3)
00158 # define TCTRACE4(MODULE, LEVEL, FORMAT, ARG1, ARG2, ARG3, ARG4) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3, ARG4)
00159 # define TCTRACEF(MODULE, LEVEL) TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, "")
00160 # define TCTRACES(MODULE, LEVEL, STREAM) \
00161 { \
00162 std::string val; \
00163 TC::StreamPtr stream(TC::Factory::CreateStringStream(val)); \
00164 stream << STREAM; \
00165 TC::Output::Trace(MODULE, LEVEL, _TC_FUNCTION_, __LINE__, "%s", val.c_str()); \
00166 }
00167
00168 #else
00169 # define TCTRACE(MODULE, LEVEL, FORMAT) ((void)0)
00170 # define TCTRACE1(MODULE, LEVEL, FORMAT, ARG1) ((void)0)
00171 # define TCTRACE2(MODULE, LEVEL, FORMAT, ARG1, ARG2) ((void)0)
00172 # define TCTRACE3(MODULE, LEVEL, FORMAT, ARG1, ARG2, ARG3) ((void)0)
00173 # define TCTRACE4(MODULE, LEVEL, FORMAT, ARG1, ARG2, ARG3, ARG4) ((void)0)
00174 # define TCTRACEF(MODULE, LEVEL)((void)0)
00175 # define TCTRACES(MODULE, LEVEL, STREAM) ((void)0)
00176 #endif
00177
00178 #define TCINFO(MODULE, FORMAT) TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, FORMAT)
00179 #define TCINFO1(MODULE, FORMAT, ARG1) TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1)
00180 #define TCINFO2(MODULE, FORMAT, ARG1, ARG2) TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2)
00181 #define TCINFO3(MODULE, FORMAT, ARG1, ARG2, ARG3) TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3)
00182 #define TCINFO4(MODULE, FORMAT, ARG1, ARG2, ARG3, ARG4) TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3, ARG4)
00183 #define TCINFOS(MODULE, STREAM) \
00184 { \
00185 std::string val; \
00186 TC::StreamPtr stream(TC::Factory::CreateStringStream(val)); \
00187 stream << STREAM; \
00188 TC::Output::Info(MODULE, _TC_FUNCTION_, __LINE__, "%s", val.c_str()); \
00189 }
00190
00191 #define TCWARNING(MODULE, FORMAT) TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, FORMAT)
00192 #define TCWARNING1(MODULE, FORMAT, ARG1) TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1)
00193 #define TCWARNING2(MODULE, FORMAT, ARG1, ARG2) TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2)
00194 #define TCWARNING3(MODULE, FORMAT, ARG1, ARG2, ARG3) TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3)
00195 #define TCWARNING4(MODULE, FORMAT, ARG1, ARG2, ARG3, ARG4) TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3, ARG4)
00196 #define TCWARNINGS(MODULE, STREAM) \
00197 { \
00198 std::string val; \
00199 TC::StreamPtr stream(TC::Factory::CreateStringStream(val)); \
00200 stream << STREAM; \
00201 TC::Output::Warning(MODULE, _TC_FUNCTION_, __LINE__, "%s", val.c_str()); \
00202 }
00203
00204 #define TCERROR(MODULE, FORMAT) TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, FORMAT)
00205 #define TCERROR1(MODULE, FORMAT, ARG1) TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1)
00206 #define TCERROR2(MODULE, FORMAT, ARG1, ARG2) TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2)
00207 #define TCERROR3(MODULE, FORMAT, ARG1, ARG2, ARG3) TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3)
00208 #define TCERROR4(MODULE, FORMAT, ARG1, ARG2, ARG3, ARG4) TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, FORMAT, ARG1, ARG2, ARG3, ARG4)
00209 #define TCERRORS(MODULE, STREAM) \
00210 { \
00211 std::string val; \
00212 TC::StreamPtr stream(TC::Factory::CreateStringStream(val)); \
00213 stream << STREAM; \
00214 TC::Output::Error(MODULE, _TC_FUNCTION_, __LINE__, "%s", val.c_str()); \
00215 }
00216
00221 #endif // _TC_OUTPUT_H_