// -*- C++ -*-
-
-// Created by Lars Gullik Bjønnes
-// Copyright 1999 Lars Gullik Bjønnes (larsbj@lyx.org)
-// Released into the public domain.
-
-// Implemented and tested on g++ 2.7.2.3
-
-// Primarily developed for use in the LyX Project http://www.lyx.org/
-// but should be adaptable to any project.
+/**
+ * \file DebugStream.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ *
+ * Full author contact details are available in file CREDITS
+ */
#ifndef DEBUGSTREAM_H
#define DEBUGSTREAM_H
#ifdef TEST_DEBUGSTREAM
#include <string>
struct Debug {
- ///
enum type {
- ///
NONE = 0,
- ///
INFO = (1 << 0), // 1
- ///
WARN = (1 << 1), // 2
- ///
CRIT = (1 << 2) // 4
};
- ///
static const type ANY = type(INFO | WARN | CRIT);
-
- /** A function to convert symbolic string names on debug levels
- to their numerical value.
- */
static Debug::type value(string const & val) {
if (val == "NONE") return Debug::NONE;
if (val == "INFO") return Debug::INFO;
if (val == "CRIT") return Debug::CRIT;
return Debug::NONE;
}
-
};
#endif
-/** DebugStream is a ostream intended for debug output. It has also support
- for a logfile. Debug output is output to cerr and if the logfile is set,
- to the logfile.
+/** DebugStream is a ostream intended for debug output.
+ It has also support for a logfile. Debug output is output to cerr
+ and if the logfile is set, to the logfile.
Example of Usage:
DebugStream debug;
INFO
Always
- If you want to have debug output from time critical code you should
+ If you want to have debug output from time critical code you should
use this construct:
if (debug.debugging(Debug::INFO)) {
- debug << "...debug output...\n";
+ debug << "...debug output...\n";
}
-
+
To give debug info even if no debug (NONE) is requested:
debug << "... always output ...\n";
debug[Debug::type(Debug::INFO | Debug::CRIT)] << "...info/crit...\n";
*/
-
-// This workaround is needed only for gcc 2.8.1 (and possibly egcs
-// 1.0.x), which generates a compiler error when subclassing from
-// std::. (JMarc)
-#ifdef CXX_WORKING_NAMESPACES
class DebugStream : public std::ostream
-#else
-class DebugStream : public ostream
-#endif
{
public:
/// Constructor, sets the debug level to t.
explicit DebugStream(Debug::type t = Debug::NONE);
-
+
/// Constructor, sets the log file to f, and the debug level to t.
explicit
DebugStream(char const * f, Debug::type t = Debug::NONE);
///
- virtual ~DebugStream();
-
+ ~DebugStream();
+
/// Sets the debug level to t.
void level(Debug::type t) {
dt = Debug::type(t & Debug::ANY);
/// Sets the debugstreams' logfile to f.
void logFile(char const * f);
-
+
/// Returns true if t is part of the current debug level.
bool debugging(Debug::type t = Debug::ANY) const
{
return false;
}
-
+
/** Returns the no-op stream if t is not part of the
current debug level otherwise the real debug stream
is used.
return nullstream;
}
-
+
/** This is an operator to give a more convenient use:
dbgstream[Debug::INFO] << "Info!\n";
*/
Debug::type dt;
/// The no-op stream.
std::ostream nullstream;
+ ///
struct debugstream_internal;
+ ///
debugstream_internal * internal;
};