The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
Gaudi::Guards::ExceptionGuard Class Reference

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>

Collaboration diagram for Gaudi::Guards::ExceptionGuard:

Public Member Functions

template<class OBJECT, class FUNCTION>
 ExceptionGuard (OBJECT obj, FUNCTION fun, MsgStream &log, IExceptionSvc *svc=0)
 
 ~ExceptionGuard ()
 destructor
 
const StatusCodecode () 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 ()=delete
 
 ExceptionGuard (const ExceptionGuard &)=delete
 
ExceptionGuardoperator= (const ExceptionGuard &)=delete
 

Private Attributes

StatusCode m_sc = StatusCode::FAILURE
 status code : result of function evaluation
 

Detailed Description

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_fn(&IAuditor::initialize) ,
log ) ;
// extract the status code"
StatusCode sc = guard.code() ;
Definition of the MsgStream class used to transmit messages.
Definition MsgStream.h:29
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64

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)"

Author
Vanya BELYAEV ibely.nosp@m.aev@.nosp@m.physi.nosp@m.cs.s.nosp@m.yr.ed.nosp@m.u
Date
2007-03-07

Definition at line 104 of file Guards.h.

Constructor & Destructor Documentation

◆ ExceptionGuard() [1/3]

template<class OBJECT, class FUNCTION>
Gaudi::Guards::ExceptionGuard::ExceptionGuard ( OBJECT obj,
FUNCTION fun,
MsgStream & log,
IExceptionSvc * svc = 0 )
inline

< execute the functor

Definition at line 112 of file Guards.h.

113 {
114 try {
115 // execute the functor:
116 m_sc = fun( obj );
117 // in the case of error try use Exception Service
118 if ( svc && m_sc.isFailure() ) { m_sc = svc->handleErr( *obj, m_sc ); }
119 } catch ( const GaudiException& e ) {
120 // Use the local handler and then (if possible) the Exception Service
121 handle( e, log );
122 if ( svc ) { m_sc = svc->handle( *obj, e ); }
123 } catch ( const std::exception& e ) {
124 // Use the local handler and then (if possible) the Exception Service
125 handle( e, log );
126 if ( svc ) { m_sc = svc->handle( *obj, e ); }
127 } catch ( ... ) {
128 // Use the local handler and then (if possible) the Exception Service
129 handle( log );
130 if ( svc ) { m_sc = svc->handle( *obj ); }
131 }
void handle(const GaudiException &e, MsgStream &s)
local handler of GaudiException
Definition Guards.cpp:25
StatusCode m_sc
status code : result of function evaluation
Definition Guards.h:157
virtual StatusCode handle(const INamedInterface &o, const GaudiException &e) const =0
Handle caught GaudiExceptions.
virtual StatusCode handleErr(const INamedInterface &o, const StatusCode &s) const =0
Handle errors.

◆ ~ExceptionGuard()

Gaudi::Guards::ExceptionGuard::~ExceptionGuard ( )

destructor

Definition at line 40 of file Guards.cpp.

40{ m_sc.ignore(); }

◆ ExceptionGuard() [2/3]

Gaudi::Guards::ExceptionGuard::ExceptionGuard ( )
privatedelete

◆ ExceptionGuard() [3/3]

Gaudi::Guards::ExceptionGuard::ExceptionGuard ( const ExceptionGuard & )
privatedelete

Member Function Documentation

◆ code()

const StatusCode & Gaudi::Guards::ExceptionGuard::code ( ) const
inline

the result of function evaluation

Definition at line 137 of file Guards.h.

◆ handle() [1/3]

void Gaudi::Guards::ExceptionGuard::handle ( const GaudiException & e,
MsgStream & s )
protected

local handler of GaudiException

Definition at line 25 of file Guards.cpp.

25 {
26 log << MSG::FATAL << System::typeinfoName( typeid( exc ) ) << "('" << exc.tag() << "') is caught!" << endmsg;
27 log << MSG::ERROR << exc << endmsg;
28 m_sc = exc.code();
29}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
@ FATAL
Definition IMessageSvc.h:22
@ ERROR
Definition IMessageSvc.h:22
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition System.cpp:260

◆ handle() [2/3]

void Gaudi::Guards::ExceptionGuard::handle ( const std::exception & e,
MsgStream & s )
protected

local handler of std::exception

Definition at line 31 of file Guards.cpp.

31 {
32 log << MSG::FATAL << System::typeinfoName( typeid( exc ) ) << " is caught!" << endmsg;
33 log << MSG::ERROR << exc.what() << endmsg;
34}

◆ handle() [3/3]

void Gaudi::Guards::ExceptionGuard::handle ( MsgStream & s)
protected

local handler of UNKNOWN exceptions

Definition at line 36 of file Guards.cpp.

36 {
37 log << MSG::FATAL << "UNKNOWN exception is caught!" << endmsg;
38}

◆ operator const StatusCode &()

Gaudi::Guards::ExceptionGuard::operator const StatusCode & ( ) const
inline

cast operator, useful for the implicit conversions

Definition at line 139 of file Guards.h.

◆ operator=()

ExceptionGuard & Gaudi::Guards::ExceptionGuard::operator= ( const ExceptionGuard & )
privatedelete

Member Data Documentation

◆ m_sc

StatusCode Gaudi::Guards::ExceptionGuard::m_sc = StatusCode::FAILURE
private

status code : result of function evaluation

Definition at line 157 of file Guards.h.


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