| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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
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

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

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 108 of file Guards.h.

## Constructor & Destructor Documentation

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

destructor

Definition at line 61 of file Guards.cpp.

{ m_sc.ignore() ; }

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

default constructor is disabled

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

no copy

## Member Function Documentation

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

the result of function evaluation

Definition at line 154 of file Guards.h.

{ return m_sc ; }

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

cast operator, useful for the implicit conversions

Definition at line 156 of file Guards.h.

{ return code() ; }

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

no assignement

## Member Data Documentation

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

status code : result of function evaluation

Definition at line 173 of file Guards.h.

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v25r0/GaudiKernel/GaudiKernel/Guards.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v25r0/GaudiKernel/src/Lib/Guards.cpp