Gaudi Framework, version v20r2

Generated: 18 Jul 2008

Gaudi::Guards::AuditorGuard Class Reference

#include <GaudiKernel/Guards.h>

Collaboration diagram for Gaudi::Guards::AuditorGuard:

Collaboration graph
[legend]
List of all members.

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.

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.


Constructor & Destructor Documentation

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

constructor

Definition at line 101 of file Guards.cpp.

References i_before().

00103                                                                    :
00104                  m_obj(obj),
00105                  m_objName(),
00106                  m_svc(svc),
00107                  m_evt(evt),
00108                  m_cevt(),
00109                  m_sc(0),
00110                  m_customEvtType(false)
00111 {
00112   i_before();
00113 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface*          obj      , 

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

constructor

Definition at line 114 of file Guards.cpp.

References i_before().

00116                                                                       :
00117                  m_obj(obj),
00118                  m_objName(),
00119                  m_svc(svc),
00120                  m_evt(IAuditor::Initialize), // Windows needs an explicit value
00121                  m_cevt(evt),
00122                  m_sc(0),
00123                  m_customEvtType(true)
00124 {
00125   i_before();
00126 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface*             obj      , 

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

constructor

Definition at line 127 of file Guards.cpp.

References i_before().

00130                                             :
00131       m_obj(obj),
00132       m_objName(),
00133       m_svc(svc),
00134       m_evt(evt),
00135       m_cevt(),
00136       m_sc(&sc),
00137       m_customEvtType(false)
00138 {
00139   i_before();
00140 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( INamedInterface*                   obj      , 

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

constructor

Definition at line 141 of file Guards.cpp.

References i_before().

00144                                                  :
00145       m_obj(obj),
00146       m_objName(),
00147       m_svc(svc),
00148       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00149       m_cevt(evt),
00150       m_sc(&sc),
00151       m_customEvtType(true)
00152 {
00153   i_before();
00154 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string           &name      , 

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

constructor

Definition at line 155 of file Guards.cpp.

References i_before().

00157                                          :
00158       m_obj(0),
00159       m_objName(name),
00160       m_svc(svc),
00161       m_evt(evt),
00162       m_cevt(),
00163       m_sc(0),
00164       m_customEvtType(false)
00165 {
00166   i_before();
00167 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string           &name      , 

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

constructor

Definition at line 168 of file Guards.cpp.

References i_before().

00170                                                :
00171       m_obj(0),
00172       m_objName(name),
00173       m_svc(svc),
00174       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00175       m_cevt(evt),
00176       m_sc(0),
00177       m_customEvtType(true)
00178 {
00179   i_before();
00180 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string           &name      , 

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

constructor

Definition at line 181 of file Guards.cpp.

References i_before().

00184                                            :
00185       m_obj(0),
00186       m_objName(name),
00187       m_svc(svc),
00188       m_evt(evt),
00189       m_cevt(),
00190       m_sc(&sc),
00191       m_customEvtType(false)
00192 {
00193   i_before();
00194 }
Gaudi::Guards::AuditorGuard::AuditorGuard ( const std::string           &name      , 

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

constructor

Definition at line 195 of file Guards.cpp.

References i_before().

00198                                                  :
00199       m_obj(0),
00200       m_objName(name),
00201       m_svc(svc),
00202       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00203       m_cevt(evt),
00204       m_sc(&sc),
00205       m_customEvtType(true)
00206 {
00207   i_before();
00208 }
// ============================================================================

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

dectructor

Definition at line 212 of file Guards.cpp.

References i_after().

00213 {
00214   i_after();
00215 }

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.

References m_sc.

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.

References IInterface::addRef(), IAuditor::before(), m_cevt, m_customEvtType, m_evt, m_obj, m_objName, and m_svc.

Referenced by AuditorGuard().

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.

References IAuditor::after(), m_cevt, m_customEvtType, m_evt, m_obj, m_objName, m_sc, m_svc, and IInterface::release().

Referenced by ~AuditorGuard().

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.

Referenced by i_after(), and i_before().

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.

Referenced by i_after(), and i_before().

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

auditor service

Definition at line 278 of file Guards.h.

Referenced by i_after(), and i_before().

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

Event type (standard events).

Definition at line 280 of file Guards.h.

Referenced by i_after(), and i_before().

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

Event type (custom events).

Definition at line 282 of file Guards.h.

Referenced by i_after(), and i_before().

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.

Referenced by code(), and i_after().

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

Flag to remember which event type was used.

Definition at line 288 of file Guards.h.

Referenced by i_after(), and i_before().


The documentation for this class was generated from the following files:
Generated at Fri Jul 18 12:10:15 2008 for Gaudi Framework, version v20r2 by Doxygen version 1.5.1 written by Dimitri van Heesch, © 1997-2004