TCOutput.h

Go to the documentation of this file.
00001 //************************************************************
00002 //
00003 // *******   ***   ***               *
00004 //    *     *     *                  *
00005 //    *    *      *                *****
00006 //    *    *       ***  *   *   **   *    **    ***
00007 //    *    *          *  * *   *     *   ****  * * *
00008 //    *     *         *   *      *   * * *     * * *
00009 //    *      ***   ***    *     **   **   **   *   *
00010 //                        *
00011 // see http://sourceforge.net/projects/tcsystem/ for details.
00012 // Copyright (C) 2003 - 2007 Thomas Goessler (the____tiger@hotmail.com)
00013 //************************************************************
00014 //
00015 // TCSystem is the legal property of its developers.
00016 // Please refer to the COPYRIGHT file distributed with this source distribution.
00017 // 
00018 // This program is free software; you can redistribute it and/or modify
00019 // it under the terms of the GNU General Public License as published by
00020 // the Free Software Foundation; either version 2 of the License, or
00021 // (at your option) any later version.
00022 // 
00023 // This program is distributed in the hope that it will be useful,
00024 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00026 // GNU General Public License for more details.
00027 // 
00028 // You should have received a copy of the GNU General Public License
00029 // along with this program; if not, write to the Free Software
00030 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00031 //----------------------------------------------------------------------
00032 //  $Id: TCOutput.h 883 2008-07-24 09:45:35Z the_____tiger $
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    }// namespace Debug
00129 
00134 } // namespace TC
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_

Copyright (c) Thomas Goessler 2003 - 2008