5 #ifndef DUNE_DEBUGSTREAM_HH
6 #define DUNE_DEBUGSTREAM_HH
128 template <DebugLevel current, DebugLevel threshold>
130 static const bool value = (current >= threshold);
140 template <DebugLevel current, DebugLevel mask>
142 enum {
value = ((current & mask)!=0) };
204 _active = activator<thislevel,alevel>::value;
219 std::ostream& fallback = std::cerr)
226 _active = activator<thislevel,alevel>::value;
249 "There are streams still tied to this stream!");
264 if (activator<thislevel, dlevel>::value) {
286 if (activator<thislevel, dlevel>::value) {
301 if (activator<thislevel, dlevel>::value) {
316 if (activator<thislevel, dlevel>::value) {
332 if (activator<thislevel,alevel>::value) {
337 _actstack.push(
false);
343 if (_actstack.empty())
344 DUNE_THROW(DebugStreamError,
"No previous activation setting!");
357 return activator<thislevel, dlevel>::value &&
_active;
376 DUNE_THROW(DebugStreamError,
"Cannot detach initial stream!");
378 DUNE_THROW(DebugStreamError,
"Cannot detach a tied stream!");
402 DUNE_THROW(DebugStreamError,
"Cannot untie, stream is not tied!");
417 std::stack<bool> _actstack;
DebugStream & flush()
pass on flush to underlying output stream
Definition: debugstream.hh:315
DebugStream & operator<<(std::ostream &(*f)(std::ostream &))
pass on manipulators to underlying output stream
Definition: debugstream.hh:300
Greater or equal template test.
Definition: debugstream.hh:129
A few common exception classes.
void tie(DebugStreamState &to)
Definition: debugstream.hh:386
bool active() const
reports if this stream will produce output
Definition: debugstream.hh:356
standard exception for the debugstream
Definition: debugstream.hh:147
Definition: debugstream.hh:149
void detach()
detach current output stream and restore to previous stream
Definition: debugstream.hh:374
DebugStream & operator<<(const T data)
Generic types are passed on to current output stream.
Definition: debugstream.hh:262
Default exception class for I/O errors.
Definition: exceptions.hh:257
Definition: debugstream.hh:142
StreamWrap(std::ostream &_out)
Definition: debugstream.hh:151
DebugStream(std::ostream &out=std::cerr)
Create a DebugStream and set initial output stream.
Definition: debugstream.hh:198
Generic class to implement debug output streams.
Definition: debugstream.hh:191
void push(bool b)
set activation flag and store old value
Definition: debugstream.hh:330
bool _tied
are we tied to another DebugStream?
Definition: debugstream.hh:167
#define DUNE_THROW(E, m)
Definition: exceptions.hh:244
void untie()
Untie stream.
Definition: debugstream.hh:400
activate if current and mask have common bits switched on.
Definition: debugstream.hh:141
std::ostream & out
Definition: debugstream.hh:151
unsigned int _tied_streams
how many streams are tied to this state
Definition: debugstream.hh:170
bool _active
flag to switch output during runtime
Definition: debugstream.hh:164
void attach(std::ostream &stream)
set output to a different stream.
Definition: debugstream.hh:364
static const bool value
Definition: debugstream.hh:130
StreamWrap * current
current output stream and link to possibly pushed old output streams
Definition: debugstream.hh:161
Intermediate class to implement tie-operation of DebugStream.
Definition: debugstream.hh:157
unsigned int DebugLevel
Type for debug levels.
Definition: debugstream.hh:117
DebugStream(DebugStreamState &master, std::ostream &fallback=std::cerr)
Create a DebugStream and directly tie to another DebugStream.
Definition: debugstream.hh:218
StreamWrap * next
Definition: debugstream.hh:153
DebugStream & operator<<(const int data)
explicit specialization so that enums can be printed
Definition: debugstream.hh:284
~DebugStream()
Destroy stream.
Definition: debugstream.hh:241
void pop()
restore previously set activation flag
Definition: debugstream.hh:342