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... |
In addition these utilities allow to remove many ugly lines from many ancient base classes
The namespace constains two simple guards:
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.