DCMTK  Version 3.6.1 20170228
OFFIS DICOM Toolkit
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
OFConsole Class Reference

Singleton class which provides thread-safe access to the standard console output and error streams. More...

Public Member Functions

virtual ~OFConsole ()
 destructor.
 
STD_NAMESPACE ostream & lockCout ()
 acquires a lock on the cout stream and returns a reference to the stream. More...
 
void unlockCout ()
 releases the lock on the cout stream.
 
STD_NAMESPACE ostream & getCout ()
 returns a reference to the current cout stream. More...
 
STD_NAMESPACE ostream * setCout (STD_NAMESPACE ostream *newCout=NULL)
 exchanges the cout stream object. More...
 
STD_NAMESPACE ostream & lockCerr ()
 acquires a lock on the cerr stream and returns a reference to the stream. More...
 
STD_NAMESPACE ostream & getCerr ()
 returns a reference to the current cerr stream. More...
 
void unlockCerr ()
 releases the lock on the cerr stream.
 
STD_NAMESPACE ostream * setCerr (STD_NAMESPACE ostream *newCerr=NULL)
 exchanges the cerr stream object. More...
 
void join ()
 combines the cerr and cout streams. More...
 
void split ()
 splits combined cerr and cout streams. More...
 
OFBool isJoined ()
 Checks whether cout and cerr are currently combined. More...
 

Static Public Member Functions

static OFConsoleinstance ()
 returns the singleton instance of this class. More...
 

Private Member Functions

 OFConsole ()
 default constructor. More...
 
 OFConsole (const OFConsole &arg)
 private undefined copy constructor
 
OFConsoleoperator= (const OFConsole &arg)
 private undefined assignment operator
 

Private Attributes

STD_NAMESPACE ostream * currentCout
 pointer to current cout stream, never NULL
 
STD_NAMESPACE ostream * currentCerr
 pointer to current cerr stream, never NULL
 
int joined
 true if streams are combined, false otherwise
 
OFMutex coutMutex
 mutex protecting access to cout
 
OFMutex cerrMutex
 mutex protecting access to cerr
 

Detailed Description

Singleton class which provides thread-safe access to the standard console output and error streams.

Allows multiple threads to concurrently create output even if that output is redirected to file or memory. Protection is implemented if the module is compiled with -DWITH_THREADS and is based on Mutexes. Use of the singleton prior to start of main (i.e. from global constructors) is allowed, but any use after the end of main is undefined.

Constructor & Destructor Documentation

OFConsole::OFConsole ( )
private

default constructor.

After construction, the cout methods refer to the standard output stream and the cerr methods refer to the standard error stream. If compiled with -DDCMTK_GUI, string streams named COUT and CERR are used instead.

Member Function Documentation

STD_NAMESPACE ostream& OFConsole::getCerr ( )
inline

returns a reference to the current cerr stream.

This method neither locks nor unlocks the stream - the called must ensure that the stream is locked and unlocked appropriately.

Returns
reference to cerr stream
STD_NAMESPACE ostream& OFConsole::getCout ( )
inline

returns a reference to the current cout stream.

This method neither locks nor unlocks the stream - the called must ensure that the stream is locked and unlocked appropriately.

Returns
reference to cout stream
static OFConsole& OFConsole::instance ( )
static

returns the singleton instance of this class.

May be called before main() but not after end of main

OFBool OFConsole::isJoined ( )

Checks whether cout and cerr are currently combined.

This method acquires its own locks. Neither cout nor cerr may be locked by the calling thread, otherwise a deadlock may occur.

Returns
OFTrue if streams are combined, OFFalse otherwise.
void OFConsole::join ( )

combines the cerr and cout streams.

After a call to this method, both cout and cerr related methods lock, unlock and return the cout stream. This method acquires its own locks. Neither cout nor cerr may be locked by the calling thread, otherwise a deadlock may occur.

STD_NAMESPACE ostream& OFConsole::lockCerr ( )
inline

acquires a lock on the cerr stream and returns a reference to the stream.

Returns
reference to cerr stream
STD_NAMESPACE ostream& OFConsole::lockCout ( )
inline

acquires a lock on the cout stream and returns a reference to the stream.

Returns
reference to cout stream
STD_NAMESPACE ostream* OFConsole::setCerr ( STD_NAMESPACE ostream *  newCerr = NULL)

exchanges the cerr stream object.

This method acquires its own lock. Cerr must not be locked by the calling thread, otherwise a deadlock may occur. The caller must ensure that the same stream object is not set both as cout and cerr because this might result in a conflict if one thread locks and uses cout, and another one locks and uses cerr. Use the join() method instead, see below.

Parameters
newCerrnew cerr stream, default: restore the stream that was active upon creation of the console object.
Returns
pointer to replaced cerr stream.
STD_NAMESPACE ostream* OFConsole::setCout ( STD_NAMESPACE ostream *  newCout = NULL)

exchanges the cout stream object.

This method acquires its own lock. Cout must not be locked by the calling thread, otherwise a deadlock may occur. The caller must ensure that the same stream object is not set both as cout and cerr because this might result in a conflict if one thread locks and uses cout, and another one locks and uses cerr. Use the join() method instead, see below.

Parameters
newCoutnew cout stream, default: restore the stream that was active upon creation of the console object.
Returns
pointer to replaced cout stream.
void OFConsole::split ( )

splits combined cerr and cout streams.

After a call to this method, cout and cerr related methods again lock, unlock and return different cout and cerr objects. This method acquires its own locks. Neither cout nor cerr may be locked by the calling thread, otherwise a deadlock may occur.


The documentation for this class was generated from the following file:


Generated on Tue Feb 28 2017 for DCMTK Version 3.6.1 20170228 by Doxygen 1.8.8