http://stxxl.sourceforge.net
<dementiev@mpi-sb.mpg.de>
<beckmann@cs.uni-frankfurt.de>
http://www.boost.org/LICENSE_1_0.txt
#ifndef STXXL_VERBOSE_HEADER
#define STXXL_VERBOSE_HEADER
#include <iostream>
#include <sstream>
#include <string>
#include <stxxl/bits/unused.h>
#define _STXXL_PRNT_COUT (1 << 0)
#define _STXXL_PRNT_CERR (1 << 1)
#define _STXXL_PRNT_LOG (1 << 2)
#define _STXXL_PRNT_ERRLOG (1 << 3)
#define _STXXL_PRNT_ADDNEWLINE (1 << 16)
#define _STXXL_PRNT_TIMESTAMP (1 << 17)
#define _STXXL_PRNT_THREAD_ID (1 << 18)
#define _STXXL_PRINT_FLAGS_DEFAULT (_STXXL_PRNT_COUT | _STXXL_PRNT_LOG)
#define _STXXL_PRINT_FLAGS_ERROR (_STXXL_PRNT_CERR | _STXXL_PRNT_ERRLOG)
#define _STXXL_PRINT_FLAGS_VERBOSE (_STXXL_PRINT_FLAGS_DEFAULT | _STXXL_PRNT_TIMESTAMP | _STXXL_PRNT_THREAD_ID)
__STXXL_BEGIN_NAMESPACE
void print_msg(const char * label, const std::string & msg, unsigned flags);
__STXXL_END_NAMESPACE
#define _STXXL_PRINT(label, message, flags) \
do { \
std::ostringstream str_; \
str_ << message; \
stxxl::print_msg(label, str_.str(), flags | _STXXL_PRNT_ADDNEWLINE); \
} while (false)
#define _STXXL_NOT_VERBOSE do { } while (false)
#ifdef STXXL_FORCE_VERBOSE_LEVEL
#undef STXXL_VERBOSE_LEVEL
#define STXXL_VERBOSE_LEVEL STXXL_FORCE_VERBOSE_LEVEL
#endif
#ifdef STXXL_DEFAULT_VERBOSE_LEVEL
#ifndef STXXL_VERBOSE_LEVEL
#define STXXL_VERBOSE_LEVEL STXXL_DEFAULT_VERBOSE_LEVEL
#endif
#endif
#ifndef STXXL_VERBOSE_LEVEL
#define STXXL_VERBOSE_LEVEL -1
#endif
#if STXXL_VERBOSE_LEVEL > -10
#define STXXL_MSG(x) _STXXL_PRINT("STXXL-MSG", x, _STXXL_PRINT_FLAGS_DEFAULT)
#else
#define STXXL_MSG(x) _STXXL_NOT_VERBOSE
#endif
#if STXXL_VERBOSE_LEVEL > -100
#define STXXL_ERRMSG(x) _STXXL_PRINT("STXXL-ERRMSG", x, _STXXL_PRINT_FLAGS_ERROR)
#else
#define STXXL_ERRMSG(x) _STXXL_NOT_VERBOSE
#endif
#if STXXL_VERBOSE_LEVEL > -1
#define STXXL_VERBOSE0(x) _STXXL_PRINT("STXXL-VERBOSE0", x, _STXXL_PRINT_FLAGS_VERBOSE)
#else
#define STXXL_VERBOSE0(x) _STXXL_NOT_VERBOSE
#endif
#if STXXL_VERBOSE_LEVEL > 0
#define STXXL_VERBOSE1(x) _STXXL_PRINT("STXXL-VERBOSE1", x, _STXXL_PRINT_FLAGS_VERBOSE)
#else
#define STXXL_VERBOSE1(x) _STXXL_NOT_VERBOSE
#endif
#define STXXL_VERBOSE(x) STXXL_VERBOSE1(x)
#if STXXL_VERBOSE_LEVEL > 1
#define STXXL_VERBOSE2(x) _STXXL_PRINT("STXXL-VERBOSE2", x, _STXXL_PRINT_FLAGS_VERBOSE)
#else
#define STXXL_VERBOSE2(x) _STXXL_NOT_VERBOSE
#endif
#if STXXL_VERBOSE_LEVEL > 2
#define STXXL_VERBOSE3(x) _STXXL_PRINT("STXXL-VERBOSE3", x, _STXXL_PRINT_FLAGS_VERBOSE)
#else
#define STXXL_VERBOSE3(x) _STXXL_NOT_VERBOSE
#endif
#ifdef BOOST_MSVC
#define stxxl_win_lasterror_exit(errmsg, exception_type) \
do { \
LPVOID lpMsgBuf; \
DWORD dw = GetLastError(); \
FormatMessage( \
FORMAT_MESSAGE_ALLOCATE_BUFFER | \
FORMAT_MESSAGE_FROM_SYSTEM, \
NULL, \
dw, \
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
(LPTSTR)&lpMsgBuf, \
0, NULL); \
std::ostringstream str_; \
str_ << "Error in " << errmsg << ", error code " << dw << ": " << ((char *)lpMsgBuf); \
LocalFree(lpMsgBuf); \
throw exception_type(str_.str()); \
} while (false)
#endif
#endif