Ipopt
trunk
|
00001 // Copyright (C) 2004, 2007 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPDEBUG_HPP__ 00010 #define __IPDEBUG_HPP__ 00011 00012 #include "IpoptConfig.h" 00013 #include "IpTypes.hpp" 00014 00015 #ifdef COIN_IPOPT_CHECKLEVEL 00016 #ifdef HAVE_CASSERT 00017 # include <cassert> 00018 #else 00019 # ifdef HAVE_ASSERT_H 00020 # include <assert.h> 00021 # else 00022 # error "don't have header file for assert" 00023 # endif 00024 #endif 00025 #else 00026 #define COIN_IPOPT_CHECKLEVEL 0 00027 #endif 00028 00029 #if COIN_IPOPT_CHECKLEVEL > 0 00030 # ifdef NDEBUG 00031 # undef NDEBUG 00032 # endif 00033 # define DBG_ASSERT(test) assert(test) 00034 # define DBG_ASSERT_EXCEPTION(__condition, __except_type, __msg) \ 00035 ASSERT_EXCEPTION( (__condition), __except_type, __msg); 00036 # define DBG_DO(__cmd) __cmd 00037 #else 00038 # define DBG_ASSERT(test) 00039 # define DBG_ASSERT_EXCEPTION(__condition, __except_type, __msg) 00040 # define DBG_DO(__cmd) 00041 #endif 00042 00043 #ifndef COIN_IPOPT_VERBOSITY 00044 #define COIN_IPOPT_VERBOSITY 0 00045 #endif 00046 00047 #if COIN_IPOPT_VERBOSITY < 1 00048 # define DBG_START_FUN(__func_name, __verbose_level) 00049 # define DBG_START_METH(__func_name, __verbose_level) 00050 # define DBG_PRINT(__printf_args) 00051 # define DBG_PRINT_VECTOR(__verbose_level, __vec_name, __vec) 00052 # define DBG_PRINT_MATRIX(__verbose_level, __mat_name, __mat) 00053 # define DBG_EXEC(__verbosity, __cmd) 00054 # define DBG_VERBOSITY() 0 00055 #else 00056 #include <string> 00057 00058 namespace Ipopt 00059 { 00060 // forward definition 00061 class Journalist; 00062 00067 class DebugJournalistWrapper 00068 { 00069 public: 00072 DebugJournalistWrapper(std::string func_name, Index verbose_level); 00073 DebugJournalistWrapper(std::string func_name, Index verbose_level, 00074 const void* const method_owner); 00075 ~DebugJournalistWrapper(); 00077 00080 Index Verbosity() 00081 { 00082 return verbose_level_; 00083 } 00084 const Journalist* Jnlst() 00085 { 00086 return jrnl_; 00087 } 00088 Index IndentationLevel() 00089 { 00090 return indentation_level_; 00091 } 00093 00095 void DebugPrintf(Index verbosity, const char* pformat, ...); 00096 00097 /* Method for initialization of the static GLOBAL journalist, 00098 * through with all debug printout is to be written. This needs 00099 * to be set before any debug printout can be done. */ 00100 static void SetJournalist(Journalist* jrnl); 00101 00102 private: 00112 DebugJournalistWrapper(); 00113 00115 DebugJournalistWrapper(const DebugJournalistWrapper&); 00116 00118 DebugJournalistWrapper& operator=(const DebugJournalistWrapper&); 00120 00121 static Index indentation_level_; 00122 std::string func_name_; 00123 Index verbose_level_; 00124 const void* method_owner_; 00125 00126 static Journalist* jrnl_; 00127 }; 00128 } 00129 00130 # define DBG_START_FUN(__func_name, __verbose_level) \ 00131 DebugJournalistWrapper dbg_jrnl((__func_name), (__verbose_level)); \ 00132 00133 # define DBG_START_METH(__func_name, __verbose_level) \ 00134 DebugJournalistWrapper dbg_jrnl((__func_name), (__verbose_level), this); 00135 00136 # define DBG_PRINT(__args) \ 00137 dbg_jrnl.DebugPrintf __args; 00138 00139 # define DBG_EXEC(__verbose_level, __cmd) \ 00140 if (dbg_jrnl.Verbosity() >= (__verbose_level)) { \ 00141 (__cmd); \ 00142 } 00143 00144 # define DBG_VERBOSITY() \ 00145 dbg_jrnl.Verbosity() 00146 00147 #endif 00148 00149 00150 #endif