X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDebug.cxx;h=3c712e7a0f2f1324db0339d15bc2d5b705ed086a;hb=6278320cc85da00d2d56ffbf07806e84966892c3;hp=fcd16cffdab1aa753c3a43e3184dcd79dd109c9e;hpb=4b4569ba7d0829cf3782ff6b5bbe5ae1009466e6;p=gdcm.git diff --git a/src/gdcmDebug.cxx b/src/gdcmDebug.cxx index fcd16cff..3c712e7a 100644 --- a/src/gdcmDebug.cxx +++ b/src/gdcmDebug.cxx @@ -3,12 +3,12 @@ Program: gdcm Module: $RCSfile: gdcmDebug.cxx,v $ Language: C++ - Date: $Date: 2004/08/01 02:39:09 $ - Version: $Revision: 1.4 $ + Date: $Date: 2007/05/23 14:18:08 $ + Version: $Revision: 1.31 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or - http://www.creatis.insa-lyon.fr/Public/Gdcm/License.htm for details. + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @@ -16,115 +16,143 @@ =========================================================================*/ -#include #include "gdcmDebug.h" +#include "gdcmCommandManager.h" + +#include +namespace GDCM_NAME_SPACE +{ //----------------------------------------------------------------------------- -gdcmDebug gdcmDebug::debug; +// Warning message level to be displayed +const int Debug::LINE_LENGTH = 79; + +bool Debug::DebugFlag = false; +bool Debug::LogFlag = false; +bool Debug::WarningFlag = false; +bool Debug::OutputToFile = false; + +std::ofstream Debug::OutputFileStream; +std::ostream &Debug::StandardStream = std::cerr; //----------------------------------------------------------------------------- -/** - * \brief constructor - * @param level debug level - */ -gdcmDebug::gdcmDebug(int level) +// Constructor / Destructor +Debug::Debug() { - DebugLevel = level; } +Debug::~Debug() +{ + if ( OutputFileStream.is_open() ) + OutputFileStream.close(); +} + +//----------------------------------------------------------------------------- +// Public /** - * \brief Accessor - * @param level Set the debug level + * \brief Sets both the debug flag and warning flag + * (both used for debugging purpose) + * @param flag Set the debug flag and warning flag */ -void gdcmDebug::SetDebug(int level) +void Debug::SetDebugFlag (bool flag) { - DebugLevel = level; + // To help tracking a bug, both flags are necessary + DebugFlag = flag; + WarningFlag = flag; } /** - * \brief Verbose - * @param Level level - * @param Msg1 first message part - * @param Msg2 second message part - */ -void gdcmDebug::Verbose(int level, const char * msg1, const char * msg2) + * \brief Sets the warning flag + * @param flag Set the warning flag + */ +void Debug::SetWarningFlag (bool flag) { - if (level > DebugLevel) - { - return ; + // Cannot unset Warning flag if Debug flag is on or if LogFlag is on. + if (flag == false) + { + if (DebugFlag == true) + return; + if (LogFlag == true) + return; } - std::cerr << msg1 << ' ' << msg2 << std::endl; + WarningFlag = flag; } /** - * \brief Error - * @param Test test - * @param Msg1 first message part - * @param Msg2 second message part - */ -void gdcmDebug::Error(bool test, const char * msg1, const char * msg2) + * \brief Sets the log flag + * @param flag Set the log flag + */ +void Debug::SetLogFlag (bool flag) { - if (!test) - { - return; - } - std::cerr << msg1 << ' ' << msg2 << std::endl; - Exit(1); + // To log oddities, both flags are necessary + WarningFlag = flag; + LogFlag = flag; } /** - * \brief Error - * @param Msg1 first message part - * @param Msg2 second message part - * @param Msg3 Third message part - */ -void gdcmDebug::Error(const char* msg1, const char* msg2, - const char* msg3) + * \brief Accessor + * @param flag whether we want to redirect to file + */ +void Debug::SetOutputToFile (bool flag) { - std::cerr << msg1 << ' ' << msg2 << ' ' << msg3 << std::endl; - Exit(1); + OutputToFile = flag; } /** - * \brief Assert - * @param Level level - * @param Test test - * @param Msg1 first message part - * @param Msg2 second message part - */ -void gdcmDebug::Assert(int level, bool test, const char * msg1, - const char * msg2) + * \brief Accessor to know whether debug info are redirected to file + */ +bool Debug::GetOutputToFile () { - if (level > DebugLevel) - { - return ; - } - if (!test) - { - std::cerr << msg1 << ' ' << msg2 << std::endl; - } + return OutputToFile; } /** - * \brief Exit - * @param a return code - */ -void gdcmDebug::Exit(int a) + * \brief Set the filename the debug stream should be redirect to + * Settting a filename also sets DebugToFile to true + * @param filename File to redirect debug info + * Absolutely nothing is check. You have to pass in + * a correct filename + */ +void Debug::SetOutputFileName (std::string const &filename) { -#ifdef __GNUC__ - std::exit(a); -#endif -#ifdef _MSC_VER - exit(a); // Found in #include -#endif + OutputToFile = true; // Just in case ... + DebugFlag = true; // Just in case ... + if ( OutputFileStream.is_open() ) + OutputFileStream.close(); + OutputFileStream.open( filename.c_str() ); } /** - * \brief Get the debug instance - * \return Reference to the debug instance + * \brief Internal use only. Allow us to retrieve the static from anywhere + * in gdcm code + * @return Debug file */ -gdcmDebug &gdcmDebug::GetReference() +std::ostream &Debug::GetOutput () +{ + if(OutputToFile) + return OutputFileStream; + else + return StandardStream; +} + +void Debug::SendToOutput(unsigned int type,std::string const &msg,const Base *object) { - return gdcmDebug::debug; + bool executed=false; + if( type != CMD_DEBUG && type != CMD_ASSERT ) + executed=CommandManager::ExecuteCommandConst(object,type,msg); + + if(!executed) + GetOutput() << Command::GetCommandAsString(type) << ": " << msg; } +//----------------------------------------------------------------------------- +// Protected + +//----------------------------------------------------------------------------- +// Private + +//----------------------------------------------------------------------------- +// Print + +//----------------------------------------------------------------------------- +} // end namespace gdcm