| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# Gaudi::Guards Namespace Reference

## Detailed Description

Guards.h GaudiKernel/Guards.h Collection of very simple classes which allows to execution of some functions within the given well-defined and exception-safe context.

In addition these utilities allow to remove many ugly lines from many ancient base classes

The namespace constains two simple guards:

- class Gaudi::Guards::ExceptionGuard
- class Gaudi::Guards::AuditorGuard

Please note tha the class Gaudi::Utils::AlgContext is also some kind of "guard".

All these guards could work togather in very collaborative way:

      StatusCode Algorithm::sysInitialize ()
       {
        // create the message stream:
        MsgStream log ( msgSvc() , name() ) ;

        // lock the scope for Auditor Service
        Gaudi::Guards::AuditorGuard auditor
               ( this                           ,
                 auditorSvc()                   ,
                 &IAuditorSvc::beforeInitialize ,
                 &IAuditorsvc::afterInitialize  ) ;

        // Lock the scope for Algorithm Context Service:
        Gaudi::Utils::AlgContext context ( this , m_contextSvc ) ;

        // execute IAlgorithm::initialize within "try{}catch(..)" clause:
        Gaudi::Guards::ExceptionGuard guard
            ( this                                  ,
              std::mem_fun(&IAlgorithm::initialize) ,
              log                                   ,
              m_exceptionSvc ) ;

        return guard ;
       }

C++ guarantees the proper execution of all "post"-actions for all involved guards when the scope is destroyed.

Author:
  Vanya BELYAEV ibelyaev@physics.syr.edu

Date:
  2007-03-07

## Classes
class | ExceptionGuard
| The most simple guard - it execute the certain code withing typical "try {} catch" clause, used in Auditor, Algorithm, AlgTool, etc. More...
class | AuditorGuard
| It is a simple guard, which "locks" the scope for the Auditor Service is am exception-safe way. More...