open source driving agent
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

150 lines
3.9 KiB

// Copyright (C) 2004, 2007 International Business Machines and others.
// All Rights Reserved.
// This code is published under the Eclipse Public License.
//
// $Id: IpDebug.hpp 2005 2011-06-06 12:55:16Z stefan $
//
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
#ifndef __IPDEBUG_HPP__
#define __IPDEBUG_HPP__
#include "IpoptConfig.h"
#include "IpTypes.hpp"
#ifdef COIN_IPOPT_CHECKLEVEL
#ifdef HAVE_CASSERT
# include <cassert>
#else
# ifdef HAVE_ASSERT_H
# include <assert.h>
# else
# error "don't have header file for assert"
# endif
#endif
#else
#define COIN_IPOPT_CHECKLEVEL 0
#endif
#if COIN_IPOPT_CHECKLEVEL > 0
# ifdef NDEBUG
# undef NDEBUG
# endif
# define DBG_ASSERT(test) assert(test)
# define DBG_ASSERT_EXCEPTION(__condition, __except_type, __msg) \
ASSERT_EXCEPTION( (__condition), __except_type, __msg);
# define DBG_DO(__cmd) __cmd
#else
# define DBG_ASSERT(test)
# define DBG_ASSERT_EXCEPTION(__condition, __except_type, __msg)
# define DBG_DO(__cmd)
#endif
#ifndef COIN_IPOPT_VERBOSITY
#define COIN_IPOPT_VERBOSITY 0
#endif
#if COIN_IPOPT_VERBOSITY < 1
# define DBG_START_FUN(__func_name, __verbose_level)
# define DBG_START_METH(__func_name, __verbose_level)
# define DBG_PRINT(__printf_args)
# define DBG_PRINT_VECTOR(__verbose_level, __vec_name, __vec)
# define DBG_PRINT_MATRIX(__verbose_level, __mat_name, __mat)
# define DBG_EXEC(__verbosity, __cmd)
# define DBG_VERBOSITY() 0
#else
#include <string>
namespace Ipopt
{
// forward definition
class Journalist;
/** Class that lives throughout the execution of a method or
* function for which debug output is to be generated. The output
* is sent to the unique debug journalist that is set with
* SetJournalist at the beginning of program execution. */
class DebugJournalistWrapper
{
public:
/** @name Constructors/Destructors. */
//@{
DebugJournalistWrapper(std::string func_name, Index verbose_level);
DebugJournalistWrapper(std::string func_name, Index verbose_level,
const void* const method_owner);
~DebugJournalistWrapper();
//@}
/** @name accessor methods */
//@{
Index Verbosity()
{
return verbose_level_;
}
const Journalist* Jnlst()
{
return jrnl_;
}
Index IndentationLevel()
{
return indentation_level_;
}
//@}
/** Printing */
void DebugPrintf(Index verbosity, const char* pformat, ...);
/* Method for initialization of the static GLOBAL journalist,
* through with all debug printout is to be written. This needs
* to be set before any debug printout can be done. */
static void SetJournalist(Journalist* jrnl);
private:
/**@name Default Compiler Generated Methods
* (Hidden to avoid implicit creation/calling).
* These methods are not implemented and
* we do not want the compiler to implement
* them for us, so we declare them private
* and do not define them. This ensures that
* they will not be implicitly created/called. */
//@{
/** default constructor */
DebugJournalistWrapper();
/** copy contructor */
DebugJournalistWrapper(const DebugJournalistWrapper&);
/** Overloaded Equals Operator */
DebugJournalistWrapper& operator=(const DebugJournalistWrapper&);
//@}
static Index indentation_level_;
std::string func_name_;
Index verbose_level_;
const void* method_owner_;
static Journalist* jrnl_;
};
}
# define DBG_START_FUN(__func_name, __verbose_level) \
DebugJournalistWrapper dbg_jrnl((__func_name), (__verbose_level)); \
# define DBG_START_METH(__func_name, __verbose_level) \
DebugJournalistWrapper dbg_jrnl((__func_name), (__verbose_level), this);
# define DBG_PRINT(__args) \
dbg_jrnl.DebugPrintf __args;
# define DBG_EXEC(__verbose_level, __cmd) \
if (dbg_jrnl.Verbosity() >= (__verbose_level)) { \
(__cmd); \
}
# define DBG_VERBOSITY() \
dbg_jrnl.Verbosity()
#endif
#endif