dune-common
2.3.0
|
![]() |
Modules | |
Standard Debug Streams |
Files | |
file | debugstream.hh |
Defines several output streams for messages of different importance. |
Classes | |
struct | Dune::greater_or_equal< current, threshold > |
Greater or equal template test. More... | |
struct | Dune::common_bits< current, mask > |
activate if current and mask have common bits switched on. More... | |
class | Dune::DebugStreamError |
standard exception for the debugstream More... | |
class | Dune::StreamWrap |
class | Dune::DebugStreamState |
Intermediate class to implement tie-operation of DebugStream. More... | |
class | Dune::DebugStream< thislevel, dlevel, alevel, activator > |
Generic class to implement debug output streams. More... |
Typedefs | |
typedef unsigned int | Dune::DebugLevel |
Type for debug levels. |
Enumerations | |
enum | { Dune::common_bits< current, mask >::value = ((current & mask)!=0) } |
Functions | |
Dune::StreamWrap::StreamWrap (std::ostream &_out) | |
Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream (std::ostream &out=std::cerr) | |
Create a DebugStream and set initial output stream. | |
Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream (DebugStreamState &master, std::ostream &fallback=std::cerr) | |
Create a DebugStream and directly tie to another DebugStream. | |
Dune::DebugStream< thislevel, dlevel, alevel, activator >::~DebugStream () | |
Destroy stream. | |
template<class T > | |
DebugStream & | Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<< (const T data) |
Generic types are passed on to current output stream. | |
DebugStream & | Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<< (const int data) |
explicit specialization so that enums can be printed | |
DebugStream & | Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<< (std::ostream &(*f)(std::ostream &)) |
pass on manipulators to underlying output stream | |
DebugStream & | Dune::DebugStream< thislevel, dlevel, alevel, activator >::flush () |
pass on flush to underlying output stream | |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::push (bool b) |
set activation flag and store old value | |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::pop () throw (DebugStreamError) |
restore previously set activation flag | |
bool | Dune::DebugStream< thislevel, dlevel, alevel, activator >::active () const |
reports if this stream will produce output | |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::attach (std::ostream &stream) |
set output to a different stream. | |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::detach () throw (DebugStreamError) |
detach current output stream and restore to previous stream | |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::tie (DebugStreamState &to) throw (DebugStreamError) |
void | Dune::DebugStream< thislevel, dlevel, alevel, activator >::untie () throw (DebugStreamError) |
Untie stream. |
Variables | |
static const bool | Dune::greater_or_equal< current, threshold >::value = (current >= threshold) |
std::ostream & | Dune::StreamWrap::out |
StreamWrap * | Dune::StreamWrap::next |
StreamWrap * | Dune::DebugStreamState::current |
current output stream and link to possibly pushed old output streams | |
bool | Dune::DebugStreamState::_active |
flag to switch output during runtime | |
bool | Dune::DebugStreamState::_tied |
are we tied to another DebugStream? | |
unsigned int | Dune::DebugStreamState::_tied_streams |
how many streams are tied to this state |
The debug output is implemented by instances of DebugStream which provides the following features:
The Dune-components should use the streams explained in Standard Debug Streams for output so that applications may redirect the output globally.
Changes in runtime are provided by three sets of methods:
The first methods implement a full stack whereas tie() is a bit different: though a tied stream may be (de)activated via push()/pop() you cannot attach() or detach() an output. You'll need to change the master stream instead.
Applications using the Dune-library should create an independent set of DebugStreams so that the debug levels can be changed separately. Example:
This code creates three streams of which only the last one really creates output. The output-routines of the other streams vanish in optimized executables.
You can use the common_bits-Template to switch to a policy using bitflags:
Applications that wish to redirect the Standard Debug Streams through their private streams may use the tie()-mechanism:
Keep in mind to untie() a stream before the tied stream is destructed.
An alternative is to attach() an output stream defined by the application:
standard debug streams with level below MINIMAL_DEBUG_LEVEL will collapse to doing nothing if output is requested.
MINIMAL_DEBUG_LEVEL is set to DUNE_MINIMAL_DEBUG_LEVEL, wich is defined in config.h and can be changed by the configure option
For a Dune-Release this should be set to at least 4 so that only important messages are active. Dune-developers may adapt this setting to their debugging needs locally
Keep in mind that libdune has to be recompiled if this value is changed!
The singleton instances of the available debug streams can be found in the Standard Debug Streams module
typedef unsigned int Dune::DebugLevel |
Type for debug levels.
Only positive values allowed
|
inline |
reports if this stream will produce output
a DebugStream that is deactivated because of its level will always return false, otherwise the state of the internal activation is returned
References Dune::DebugStreamState::_active.
|
inline |
set output to a different stream.
Old stream data is stored
References Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, DUNE_THROW, and Dune::StreamWrap::next.
|
inline |
Create a DebugStream and set initial output stream.
during runtime another stream can be attach()ed, however the initial stream may not be detach()ed.
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::_tied_streams, Dune::DebugStreamState::current, and Dune::StreamWrap::next.
|
inline |
Create a DebugStream and directly tie to another DebugStream.
The fallback is used if a DebugStream constructed via this method is untie()ed later. Otherwise the stream would be broken afterwards.
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::_tied_streams, Dune::DebugStreamState::current, and Dune::StreamWrap::next.
|
inline |
detach current output stream and restore to previous stream
References Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, DUNE_THROW, and Dune::StreamWrap::next.
|
inline |
pass on flush to underlying output stream
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, and Dune::StreamWrap::out.
|
inline |
Generic types are passed on to current output stream.
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, and Dune::StreamWrap::out.
|
inline |
explicit specialization so that enums can be printed
Operators for built-in types follow special rules (ยง11.2.3) so that enums won't fit into the generic method above. With an existing operator<< for int however the enum will be automatically casted.
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, and Dune::StreamWrap::out.
|
inline |
pass on manipulators to underlying output stream
References Dune::DebugStreamState::_active, Dune::DebugStreamState::_tied, Dune::DebugStreamState::current, and Dune::StreamWrap::out.
|
inline |
restore previously set activation flag
References Dune::DebugStreamState::_active, and DUNE_THROW.
|
inline |
set activation flag and store old value
References Dune::DebugStreamState::_active.
|
inline |
|
inline |
References Dune::DebugStreamState::_tied, Dune::DebugStreamState::_tied_streams, and DUNE_THROW.
|
inline |
Untie stream.
References Dune::DebugStreamState::_tied, Dune::DebugStreamState::_tied_streams, and DUNE_THROW.
|
inline |
Destroy stream.
if other streams still tie() to this stream an exception will be thrown. Otherwise the child streams would certainly break on the next output
References Dune::DebugStreamState::_tied, Dune::DebugStreamState::_tied_streams, Dune::DebugStreamState::current, DUNE_THROW, and Dune::StreamWrap::next.
bool Dune::DebugStreamState::_active |
flag to switch output during runtime
Referenced by Dune::DebugStream< thislevel, dlevel, alevel, activator >::active(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::flush(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<<(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::pop(), and Dune::DebugStream< thislevel, dlevel, alevel, activator >::push().
bool Dune::DebugStreamState::_tied |
are we tied to another DebugStream?
Referenced by Dune::DebugStream< thislevel, dlevel, alevel, activator >::attach(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::detach(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::flush(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<<(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::tie(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::untie(), and Dune::DebugStream< thislevel, dlevel, alevel, activator >::~DebugStream().
unsigned int Dune::DebugStreamState::_tied_streams |
how many streams are tied to this state
Referenced by Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::tie(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::untie(), and Dune::DebugStream< thislevel, dlevel, alevel, activator >::~DebugStream().
StreamWrap* Dune::DebugStreamState::current |
current output stream and link to possibly pushed old output streams
Referenced by Dune::DebugStream< thislevel, dlevel, alevel, activator >::attach(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::detach(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::flush(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::operator<<(), and Dune::DebugStream< thislevel, dlevel, alevel, activator >::~DebugStream().
StreamWrap* Dune::StreamWrap::next |
Referenced by Dune::DebugStream< thislevel, dlevel, alevel, activator >::attach(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::DebugStream(), Dune::DebugStream< thislevel, dlevel, alevel, activator >::detach(), and Dune::DebugStream< thislevel, dlevel, alevel, activator >::~DebugStream().
std::ostream& Dune::StreamWrap::out |
|
static |