| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

Gaudi::Guards::AuditorGuard Class Reference

It is a simple guard, which "locks" the scope for the Auditor Service is am exception-safe way. More...

#include <GaudiKernel/Guards.h>

Collaboration diagram for Gaudi::Guards::AuditorGuard:

[legend]
List of all members.

Public Member Functions

 AuditorGuard (INamedInterface *obj, IAuditor *svc, IAuditor::StandardEventType evt)
 constructor
 AuditorGuard (INamedInterface *obj, IAuditor *svc, IAuditor::CustomEventTypeRef evt)
 constructor
 AuditorGuard (INamedInterface *obj, IAuditor *svc, IAuditor::StandardEventType evt, const StatusCode &sc)
 constructor
 AuditorGuard (INamedInterface *obj, IAuditor *svc, IAuditor::CustomEventTypeRef evt, const StatusCode &sc)
 constructor
 AuditorGuard (const std::string &name, IAuditor *svc, IAuditor::StandardEventType evt)
 constructor
 AuditorGuard (const std::string &name, IAuditor *svc, IAuditor::CustomEventTypeRef evt)
 constructor
 AuditorGuard (const std::string &name, IAuditor *svc, IAuditor::StandardEventType evt, const StatusCode &sc)
 constructor
 AuditorGuard (const std::string &name, IAuditor *svc, IAuditor::CustomEventTypeRef evt, const StatusCode &sc)
 constructor
 ~AuditorGuard ()
 dectructor
const StatusCodecode () const

Private Member Functions

 AuditorGuard ()
 the default constructor is disabled
 AuditorGuard (const AuditorGuard &right)
 no copy
AuditorGuardoperator= (const AuditorGuard &right)
 no assignement
void i_before ()
void i_after ()

Private Attributes

INamedInterfacem_obj
 the guarded object
std::string m_objName
 the guarded object name (if there is no INamedInterface)
IAuditorm_svc
 auditor service
IAuditor::StandardEventType m_evt
 Event type (standard events).
IAuditor::CustomEventType m_cevt
 Event type (custom events).
const StatusCodem_sc
 Pointer to a status code instance, to be passed to the "after" function if needed The instance must have a scope larger than the one of the guard.
bool m_customEvtType
 Flag to remember which event type was used.

Detailed Description

It is a simple guard, which "locks" the scope for the Auditor Service is am exception-safe way.

The pattern ensures that "post-action" will be always executed

  StatusCode Algorithm::sysInitialize ()
   {
      AuditorGuard auditor ( this , 
        auditSvc()                ,   
        IAuditor::Initialize      ) ; 
      ...
      StatusCode sc = ... ; 
      ...
      return sc ;                  
   }

  StatusCode Algorithm::sysExecute ()
   {
      AuditorGuard auditor ( this       , 
        auditSvc()                      ,   
        IAuditor::execute               ) ; 
      ...
      StatusCode sc = ... ; 
      ... 
      auditor.setCode ( sc ) ;
      ...
      return sc ;                  
   }

Author:
Vanya BELYAEV ibelyaev@physics.syr.edu
Date:
2007-03-07

Definition at line 218 of file Guards.h.


Constructor & Destructor Documentation

Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface obj,
IAuditor svc,
IAuditor::StandardEventType  evt 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface obj,
IAuditor svc,
IAuditor::CustomEventTypeRef  evt 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface obj,
IAuditor svc,
IAuditor::StandardEventType  evt,
const StatusCode sc 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface obj,
IAuditor svc,
IAuditor::CustomEventTypeRef  evt,
const StatusCode sc 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string &  name,
IAuditor svc,
IAuditor::StandardEventType  evt 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string &  name,
IAuditor svc,
IAuditor::CustomEventTypeRef  evt 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string &  name,
IAuditor svc,
IAuditor::StandardEventType  evt,
const StatusCode sc 
)

constructor

Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string &  name,
IAuditor svc,
IAuditor::CustomEventTypeRef  evt,
const StatusCode sc 
)

constructor

Gaudi::Guards::AuditorGuard::~AuditorGuard (  ) 

dectructor

Gaudi::Guards::AuditorGuard::AuditorGuard (  )  [private]

the default constructor is disabled

Gaudi::Guards::AuditorGuard::AuditorGuard ( const AuditorGuard right  )  [private]

no copy


Member Function Documentation

const StatusCode& Gaudi::Guards::AuditorGuard::code (  )  const [inline]

Definition at line 264 of file Guards.h.

00264 { return *m_sc ; }

AuditorGuard& Gaudi::Guards::AuditorGuard::operator= ( const AuditorGuard right  )  [private]

no assignement

void Gaudi::Guards::AuditorGuard::i_before (  )  [inline, private]

Definition at line 290 of file Guards.h.

00290                              {
00291         if ( 0 != m_svc ) { // if the service is not available, we cannot do anything
00292           m_svc->addRef(); // increase the reference counting
00293           if (0 != m_obj) {
00294             if (m_customEvtType) {
00295               m_svc->before(m_cevt,m_obj);
00296             } else {
00297               m_svc->before(m_evt,m_obj);
00298             }
00299           } else { // use object name 
00300             if (m_customEvtType) {
00301               m_svc->before(m_cevt,m_objName);
00302             } else {
00303               m_svc->before(m_evt,m_objName);
00304             }
00305           }
00306         }
00307       }

void Gaudi::Guards::AuditorGuard::i_after (  )  [inline, private]

Definition at line 309 of file Guards.h.

00309                             {
00310         if ( 0 != m_svc ) { // if the service is not available, we cannot do anything
00311           if (0 != m_obj) {
00312             if (m_customEvtType) {
00313               if (0 != m_sc) {
00314                 m_svc->after(m_cevt,m_obj,*m_sc);
00315               } else {
00316                 m_svc->after(m_cevt,m_obj);
00317               }
00318             } else {
00319               if (0 != m_sc) {
00320                 m_svc->after(m_evt,m_obj,*m_sc);
00321               } else {
00322                 m_svc->after(m_evt,m_obj);
00323               }
00324             }
00325           } else { // use object name 
00326             if (m_customEvtType) {
00327               if (0 != m_sc) {
00328                 m_svc->after(m_cevt,m_objName,*m_sc);
00329               } else {
00330                 m_svc->after(m_cevt,m_objName);
00331               }
00332             } else {
00333               if (0 != m_sc) {
00334                 m_svc->after(m_evt,m_objName,*m_sc);
00335               } else {
00336                 m_svc->after(m_evt,m_objName);
00337               }
00338             }
00339           }
00340           m_svc->release(); // we do not need the service anymore
00341           m_svc = 0 ;
00342         }
00343       }


Member Data Documentation

INamedInterface* Gaudi::Guards::AuditorGuard::m_obj [private]

the guarded object

Definition at line 274 of file Guards.h.

std::string Gaudi::Guards::AuditorGuard::m_objName [private]

the guarded object name (if there is no INamedInterface)

Definition at line 276 of file Guards.h.

IAuditor* Gaudi::Guards::AuditorGuard::m_svc [private]

auditor service

Definition at line 278 of file Guards.h.

IAuditor::StandardEventType Gaudi::Guards::AuditorGuard::m_evt [private]

Event type (standard events).

Definition at line 280 of file Guards.h.

IAuditor::CustomEventType Gaudi::Guards::AuditorGuard::m_cevt [private]

Event type (custom events).

Definition at line 282 of file Guards.h.

const StatusCode* Gaudi::Guards::AuditorGuard::m_sc [private]

Pointer to a status code instance, to be passed to the "after" function if needed The instance must have a scope larger than the one of the guard.

No check is performed.

Definition at line 286 of file Guards.h.

bool Gaudi::Guards::AuditorGuard::m_customEvtType [private]

Flag to remember which event type was used.

Definition at line 288 of file Guards.h.


The documentation for this class was generated from the following file:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:57:17 2011 for GaudiKernel by doxygen 1.4.7