| The Gaudi Framework v32r1 (f65d50dc)

Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
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:
[legend]

## Public Member Functions
template<class OBJECT , class FUNCTION >
| ExceptionGuard (OBJECT obj, FUNCTION fun, MsgStream &log, IExceptionSvc *svc=0)
| ~ExceptionGuard ()
| destructor More...
const StatusCode & | code () const
| the result of function evaluation More...
| operator const StatusCode & () const
| cast operator, useful for the implicit conversions More...

## Protected Member Functions
void | handle (const GaudiException &e, MsgStream &s)
| local handler of GaudiException More...
void | handle (const std::exception &e, MsgStream &s)
| local handler of std::exception More...
void | handle (MsgStream &s)
| local handler of UNKNOWN exceptions More...

## Private Member Functions
| ExceptionGuard ()=delete
| ExceptionGuard (const ExceptionGuard &)=delete
ExceptionGuard & | operator= (const ExceptionGuard &)=delete

## Private Attributes
StatusCode | m_sc = StatusCode::FAILURE
| status code : result of function evaluation More...

## 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() ;

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 105 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 113 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 }
132 }
Gaudi::Guards::ExceptionGuard::handle
void handle(const GaudiException &e, MsgStream &s)
local handler of GaudiException
Definition: Guards.cpp:24
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:21
Gaudi::Guards::ExceptionGuard::m_sc
StatusCode m_sc
status code : result of function evaluation
Definition: Guards.h:158
IExceptionSvc::handle
virtual StatusCode handle(const INamedInterface &o, const GaudiException &e) const =0
Handle caught GaudiExceptions.
std::exception
STL class.
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:130
IExceptionSvc::handleErr
virtual StatusCode handleErr(const INamedInterface &o, const StatusCode &s) const =0
Handle errors.
Gaudi.Configuration.log
log
Definition: Configuration.py:13

## ◆ ~ExceptionGuard()

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

destructor

Definition at line 51 of file Guards.cpp.

51 { m_sc.ignore(); }
Gaudi::Guards::ExceptionGuard::m_sc
StatusCode m_sc
status code : result of function evaluation
Definition: Guards.h:158
StatusCode::ignore
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153

## ◆ ExceptionGuard() [2/3]

Gaudi::Guards::ExceptionGuard::ExceptionGuard | ( |  | ) |
| private delete

## ◆ ExceptionGuard() [3/3]

Gaudi::Guards::ExceptionGuard::ExceptionGuard | ( | const ExceptionGuard & |  | ) |
| private delete

## Member Function Documentation

## ◆ code()

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

the result of function evaluation

Definition at line 138 of file Guards.h.

138 { return m_sc; }
Gaudi::Guards::ExceptionGuard::m_sc
StatusCode m_sc
status code : result of function evaluation
Definition: Guards.h:158

## ◆ handle() [1/3]

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

local handler of GaudiException

Definition at line 24 of file Guards.cpp.

24 {
25 // the general printout
26 log << MSG::FATAL << System::typeinfoName( typeid( exc ) ) << "('" << exc.tag() << "') is caught!" << endmsg;
27 // print the detailes about the exception:
28 log << MSG::ERROR << exc << endmsg;
29 // get the status code form the exception:
30 m_sc = exc.code();
31 }
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
Gaudi::Guards::ExceptionGuard::m_sc
StatusCode m_sc
status code : result of function evaluation
Definition: Guards.h:158
MSG::FATAL
Definition: IMessageSvc.h:15
MSG::ERROR
Definition: IMessageSvc.h:15
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi.Configuration.log
log
Definition: Configuration.py:13

## ◆ handle() [2/3]

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

local handler of std::exception

Definition at line 35 of file Guards.cpp.

35 {
36 // the general printout
37 log << MSG::FATAL << System::typeinfoName( typeid( exc ) ) << " is caught!" << endmsg;
38 // print the detailes abotu the exception:
39 log << MSG::ERROR << exc.what() << endmsg;
40 }
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
MSG::FATAL
Definition: IMessageSvc.h:15
MSG::ERROR
Definition: IMessageSvc.h:15
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi.Configuration.log
log
Definition: Configuration.py:13

## ◆ handle() [3/3]

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

local handler of UNKNOWN exceptions

Definition at line 44 of file Guards.cpp.

44 {
45 // the general printout
46 log << MSG::FATAL << "UNKNOWN exception is caught!" << endmsg;
47 }
MSG::FATAL
Definition: IMessageSvc.h:15
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi.Configuration.log
log
Definition: Configuration.py:13

## ◆ operator const StatusCode &()

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

cast operator, useful for the implicit conversions

Definition at line 140 of file Guards.h.

140 { return code(); }
Gaudi::Guards::ExceptionGuard::code
const StatusCode & code() const
the result of function evaluation
Definition: Guards.h:138

## ◆ operator=()

ExceptionGuard& Gaudi::Guards::ExceptionGuard::operator= | ( | const ExceptionGuard & |  | ) |
| private delete

## Member Data Documentation

## ◆ m_sc

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

status code : result of function evaluation

Definition at line 158 of file Guards.h.

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

- GaudiKernel/GaudiKernel/Guards.h
- GaudiKernel/src/Lib/Guards.cpp