Gaudi Framework, version v22r0

Home   Generated: 9 Feb 2011

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:
Collaboration graph
[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

Definition at line 65 of file Guards.cpp.

00068                                                                    :
00069                  m_obj(obj),
00070                  m_objName(),
00071                  m_svc(svc),
00072                  m_evt(evt),
00073                  m_cevt(),
00074                  m_sc(0),
00075                  m_customEvtType(false)
00076 {
00077   i_before();
}

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

constructor

Definition at line 78 of file Guards.cpp.

00081                                                                       :
00082                  m_obj(obj),
00083                  m_objName(),
00084                  m_svc(svc),
00085                  m_evt(IAuditor::Initialize), // Windows needs an explicit value
00086                  m_cevt(evt),
00087                  m_sc(0),
00088                  m_customEvtType(true)
00089 {
00090   i_before();
}

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

constructor

Definition at line 91 of file Guards.cpp.

00095                                             :
00096       m_obj(obj),
00097       m_objName(),
00098       m_svc(svc),
00099       m_evt(evt),
00100       m_cevt(),
00101       m_sc(&sc),
00102       m_customEvtType(false)
00103 {
00104   i_before();
}

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

constructor

Definition at line 105 of file Guards.cpp.

00109                                                  :
00110       m_obj(obj),
00111       m_objName(),
00112       m_svc(svc),
00113       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00114       m_cevt(evt),
00115       m_sc(&sc),
00116       m_customEvtType(true)
00117 {
00118   i_before();
}

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

constructor

Definition at line 119 of file Guards.cpp.

00122                                          :
00123       m_obj(0),
00124       m_objName(name),
00125       m_svc(svc),
00126       m_evt(evt),
00127       m_cevt(),
00128       m_sc(0),
00129       m_customEvtType(false)
00130 {
00131   i_before();
}

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

constructor

Definition at line 132 of file Guards.cpp.

00135                                                :
00136       m_obj(0),
00137       m_objName(name),
00138       m_svc(svc),
00139       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00140       m_cevt(evt),
00141       m_sc(0),
00142       m_customEvtType(true)
00143 {
00144   i_before();
}

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

constructor

Definition at line 145 of file Guards.cpp.

00149                                            :
00150       m_obj(0),
00151       m_objName(name),
00152       m_svc(svc),
00153       m_evt(evt),
00154       m_cevt(),
00155       m_sc(&sc),
00156       m_customEvtType(false)
00157 {
00158   i_before();
}

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

constructor

Definition at line 159 of file Guards.cpp.

00163                                                  :
00164       m_obj(0),
00165       m_objName(name),
00166       m_svc(svc),
00167       m_evt(IAuditor::Initialize), // Windows needs an explicit value
00168       m_cevt(evt),
00169       m_sc(&sc),
00170       m_customEvtType(true)
00171 {
00172   i_before();
}

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

dectructor

Definition at line 176 of file Guards.cpp.

00177 {
00178   i_after();
00179 }

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 ; }

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       }

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       }

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

no assignement


Member Data Documentation

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

Event type (custom events).

Definition at line 282 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.

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

Event type (standard events).

Definition at line 280 of file Guards.h.

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.

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.

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

auditor service

Definition at line 278 of file Guards.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Wed Feb 9 16:33:09 2011 for Gaudi Framework, version v22r0 by Doxygen version 1.6.2 written by Dimitri van Heesch, © 1997-2004