]> git.lyx.org Git - lyx.git/blobdiff - src/support/debugstream.h
remove lyxrc dependence from support/*
[lyx.git] / src / support / debugstream.h
index 6b7334477b9c1ecb2f2c7481bc90272c89f22d4d..63744ef4c5014c87bf003dc192211a31ec180db7 100644 (file)
 
 #include <iostream>
 
-#include <boost/test/detail/nullstream.hpp>
+#include <boost/version.hpp>
+
+
+//namespace lyx {
+
+#if BOOST_VERSION < 103300
+#  include <boost/test/detail/nullstream.hpp>
+#else
+#  include <boost/test/utils/nullstream.hpp>
+#endif
+
+#ifdef DEBUG
+# define TEMPORARY_DEBUG_MACRO DEBUG
+# undef DEBUG
+#endif
 
 struct debug_trait {
        enum type {
@@ -35,6 +49,11 @@ struct debug_trait {
        }
 };
 
+#ifdef TEMPORARY_DEBUG_MACRO
+# define DEBUG TEMPORARY_DEBUG_MACRO
+# undef TEMPORARY_DEBUG_MACRO
+#endif
+
 
 template <class dtrait,
          class charT = char,
@@ -45,12 +64,14 @@ public:
        typedef typename debug::type Type;
 
        basic_debugstream()
-               : std::basic_ostream<charT, traits>(0), dt(debug::NONE)
+               : std::basic_ostream<charT, traits>(0), dt(debug::NONE),
+                 realbuf_(0), enabled_(true)
        {}
 
        /// Constructor, sets the debug level to t.
        explicit basic_debugstream(std::basic_streambuf<charT, traits> * buf)
-               : std::basic_ostream<charT, traits>(buf), dt(debug::NONE)
+               : std::basic_ostream<charT, traits>(buf), dt(debug::NONE),
+                 realbuf_(0), enabled_(true)
        {}
 
        /// Sets the debug level to t.
@@ -80,13 +101,37 @@ public:
                        return *this;
                return nullstream;
        }
+       /// Disable the stream completely
+       void disable()
+       {
+               if (enabled_) {
+                       realbuf_ = this->rdbuf();
+                       rdbuf(nullstream.rdbuf());
+                       enabled_ = false;
+               }
+       }
+       /// Enable the stream after a possible call of disable()
+       void enable()
+       {
+               if (!enabled_) {
+                       this->rdbuf(realbuf_);
+                       enabled_ = true;
+               }
+       }
 private:
        /// The current debug level
        Type dt;
        /// The no-op stream.
        boost::basic_onullstream<charT, traits> nullstream;
+       /// The buffer of the real stream
+       std::streambuf * realbuf_;
+       /// Is the stream enabled?
+       bool enabled_;
 };
 
 typedef basic_debugstream<debug_trait> debugstream;
 
+
+//} // namespace lyx
+
 #endif