4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Lars Gullik Bjønnes
9 * Full author contact details are available in file CREDITS.
12 #ifndef DEBUG_STREAM_HPP
13 #define DEBUG_STREAM_HPP
15 #include <boost/test/detail/nullstream.hpp>
32 static bool match(type a, type b) {
33 return (b <= a || (b == ANY && a > NONE));
38 template <class dtrait,
40 class traits = std::char_traits<charT> >
41 class basic_debugstream : public std::basic_ostream<charT, traits> {
44 typedef typename debug::type Type;
46 /// Constructor, sets the debug level to t.
47 explicit basic_debugstream(std::basic_streambuf<charT, traits> * buf)
48 : std::basic_ostream<charT, traits>(buf), dt(debug::NONE)
51 /// Sets the debug level to t.
56 /// Returns the current debug level.
61 /// Returns true if t is part of the current debug level.
62 bool debugging(Type t = debug::ANY) const
64 if (debug::match(dt, t)) return true;
68 /** Returns the no-op stream if t is not part of the
69 current debug level otherwise the real debug stream
71 Use: dbgstream[Debug::INFO] << "Info!\n";
73 std::basic_ostream<charT, traits> & operator[](Type t) {
74 if (debug::match(dt, t))
79 /// The current debug level
82 boost::basic_onullstream<charT, traits> nullstream;
85 typedef basic_debugstream<debug_trait> debugstream;