Gaudi Framework, version v23r0 |
Home | Generated: Mon Jan 30 2012 |
The most simple guard - it execute the certain code withing typical "try {} catch" clause, used in Auditor, Algorithm, AlgTool, etc. More...
#include <GaudiKernel/Guards.h>
Public Member Functions | |
template<class OBJECT , class FUNCTION > | |
ExceptionGuard (OBJECT obj, FUNCTION fun, MsgStream &log, IExceptionSvc *svc=0) | |
~ExceptionGuard () | |
destructor | |
const StatusCode & | code () const |
the result of function evaluation | |
operator const StatusCode & () const | |
cast operator, useful for the implicit conversions | |
Protected Member Functions | |
void | handle (const GaudiException &e, MsgStream &s) |
local handler of GaudiException | |
void | handle (const std::exception &e, MsgStream &s) |
local handler of std::exception | |
void | handle (MsgStream &s) |
local handler of UNKNOWN exceptions | |
Private Member Functions | |
ExceptionGuard () | |
default constructor is disabled | |
ExceptionGuard (const ExceptionGuard &) | |
no copy | |
ExceptionGuard & | operator= (const ExceptionGuard &) |
no assignement | |
Private Attributes | |
StatusCode | m_sc |
status code : result of function evaluation |
The most simple guard - it execute the certain code withing typical "try {} catch" clause, used in Auditor, Algorithm, AlgTool, etc.
. classes
The usage is fairly trivial:
// get the stream: MsgStream& log = ... ; // create the guard object and execute this->initialize() // within the standard "try"-clause: Gaudi::Guards::Guard guard ( this , std::mem_fun(&IAuditor::initialize) , log ) ; // extract the status code" StatusCode sc = guard.code() ;
The utility could be reused for member-function, regular functions, etc.. It could be easily combined with STL-idioms Essentially it required only the semantical validity of the expression "StatusCode sc = fun(obj)"
Definition at line 108 of file Guards.h.
Gaudi::Guards::ExceptionGuard::ExceptionGuard | ( | OBJECT | obj, |
FUNCTION | fun, | ||
MsgStream & | log, | ||
IExceptionSvc * | svc = 0 |
||
) | [inline] |
< execute the functor
Definition at line 118 of file Guards.h.
: m_sc ( StatusCode::FAILURE ) { try { // execute the functor: m_sc = fun ( obj ) ; // in the case of error try use Exception Service if ( 0 != svc && m_sc.isFailure() ) { m_sc = svc->handleErr ( *obj , m_sc ) ; } } catch ( const GaudiException& e ) { // Use the local handler and then (if possible) the Exception Service handle ( e , log ) ; if ( 0 != svc ) { m_sc = svc -> handle ( *obj , e ) ; } } catch ( const std::exception& e ) { // Use the local handler and then (if possible) the Exception Service handle ( e , log ) ; if ( 0 != svc ) { m_sc = svc -> handle ( *obj , e ) ; } } catch ( ... ) { // Use the local handler and then (if possible) the Exception Service handle ( log ) ; if ( 0 != svc ) { m_sc = svc -> handle ( *obj ) ; } } }
Gaudi::Guards::ExceptionGuard::~ExceptionGuard | ( | ) |
Gaudi::Guards::ExceptionGuard::ExceptionGuard | ( | ) | [private] |
default constructor is disabled
Gaudi::Guards::ExceptionGuard::ExceptionGuard | ( | const ExceptionGuard & | ) | [private] |
no copy
const StatusCode& Gaudi::Guards::ExceptionGuard::code | ( | ) | const [inline] |
void Gaudi::Guards::ExceptionGuard::handle | ( | const GaudiException & | e, |
MsgStream & | s | ||
) | [protected] |
local handler of GaudiException
Definition at line 26 of file Guards.cpp.
{ // the general printout log << MSG::FATAL << System::typeinfoName( typeid ( exc ) ) << "('" << exc.tag() << "') is caught!" << endmsg ; // print the detailes about the exception: log << MSG::ERROR << exc << endmsg ; // get the status code form the exception: m_sc = exc.code() ; }
void Gaudi::Guards::ExceptionGuard::handle | ( | const std::exception & | e, |
MsgStream & | s | ||
) | [protected] |
local handler of std::exception
Definition at line 41 of file Guards.cpp.
{ // the general printout log << MSG::FATAL << System::typeinfoName( typeid ( exc ) ) << " is caught!" << endmsg ; // print the detailes abotu the exception: log << MSG::ERROR << exc.what() << endmsg ; }
void Gaudi::Guards::ExceptionGuard::handle | ( | MsgStream & | s ) | [protected] |
local handler of UNKNOWN exceptions
Definition at line 53 of file Guards.cpp.
{ // the general printout log << MSG::FATAL << "UNKNOWN exception is caught!" << endmsg ; }
Gaudi::Guards::ExceptionGuard::operator const StatusCode & | ( | ) | const [inline] |
ExceptionGuard& Gaudi::Guards::ExceptionGuard::operator= | ( | const ExceptionGuard & | ) | [private] |
no assignement
StatusCode Gaudi::Guards::ExceptionGuard::m_sc [private] |