| # Gaudi Framework, version v22r2 |

Home |  | Generated: Tue May 10 2011

Public Member Functions | Private Member Functions | Private Attributes

# 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 StatusCode & | code () const
## Private Member Functions
| AuditorGuard ()
| the default constructor is disabled
| AuditorGuard (const AuditorGuard &right)
| no copy
AuditorGuard & | operator= (const AuditorGuard &right)
| no assignement
void | i_before ()
void | i_after ()
## Private Attributes
INamedInterface * | m_obj
| the guarded object
std::string | m_objName
| the guarded object name (if there is no INamedInterface)
IAuditor * | m_svc
| auditor service
IAuditor::StandardEventType | m_evt
| Event type (standard events)
IAuditor::CustomEventType | m_cevt
| Event type (custom events)
const StatusCode * | m_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.

                                                                       :
                     m_obj(obj),
                     m_objName(),
                     m_svc(svc),
                     m_evt(evt),
                     m_cevt(),
                     m_sc(0),
                     m_customEvtType(false)
    {
      i_before();
    }

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

constructor

Definition at line 78 of file Guards.cpp.

                                                                          :
                     m_obj(obj),
                     m_objName(),
                     m_svc(svc),
                     m_evt(IAuditor::Initialize), // Windows needs an explicit value
                     m_cevt(evt),
                     m_sc(0),
                     m_customEvtType(true)
    {
      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.

                                                :
          m_obj(obj),
          m_objName(),
          m_svc(svc),
          m_evt(evt),
          m_cevt(),
          m_sc(&sc),
          m_customEvtType(false)
    {
      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.

                                                     :
          m_obj(obj),
          m_objName(),
          m_svc(svc),
          m_evt(IAuditor::Initialize), // Windows needs an explicit value
          m_cevt(evt),
          m_sc(&sc),
          m_customEvtType(true)
    {
      i_before();
    }

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

constructor

Definition at line 119 of file Guards.cpp.

                                             :
          m_obj(0),
          m_objName(name),
          m_svc(svc),
          m_evt(evt),
          m_cevt(),
          m_sc(0),
          m_customEvtType(false)
    {
      i_before();
    }

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

constructor

Definition at line 132 of file Guards.cpp.

                                                   :
          m_obj(0),
          m_objName(name),
          m_svc(svc),
          m_evt(IAuditor::Initialize), // Windows needs an explicit value
          m_cevt(evt),
          m_sc(0),
          m_customEvtType(true)
    {
      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.

                                               :
          m_obj(0),
          m_objName(name),
          m_svc(svc),
          m_evt(evt),
          m_cevt(),
          m_sc(&sc),
          m_customEvtType(false)
    {
      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.

                                                     :
          m_obj(0),
          m_objName(name),
          m_svc(svc),
          m_evt(IAuditor::Initialize), // Windows needs an explicit value
          m_cevt(evt),
          m_sc(&sc),
          m_customEvtType(true)
    {
      i_before();
    }

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

dectructor

Definition at line 176 of file Guards.cpp.

    {
      i_after();
    }

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.

    { return *m_sc ; }

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

Definition at line 309 of file Guards.h.

                                {
            if ( 0 != m_svc ) { // if the service is not available, we cannot do anything
              if (0 != m_obj) {
                if (m_customEvtType) {
                  if (0 != m_sc) {
                    m_svc->after(m_cevt,m_obj,*m_sc);
                  } else {
                    m_svc->after(m_cevt,m_obj);
                  }
                } else {
                  if (0 != m_sc) {
                    m_svc->after(m_evt,m_obj,*m_sc);
                  } else {
                    m_svc->after(m_evt,m_obj);
                  }
                }
              } else { // use object name
                if (m_customEvtType) {
                  if (0 != m_sc) {
                    m_svc->after(m_cevt,m_objName,*m_sc);
                  } else {
                    m_svc->after(m_cevt,m_objName);
                  }
                } else {
                  if (0 != m_sc) {
                    m_svc->after(m_evt,m_objName,*m_sc);
                  } else {
                    m_svc->after(m_evt,m_objName);
                  }
                }
              }
              m_svc->release(); // we do not need the service anymore
              m_svc = 0 ;
            }
          }

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

Definition at line 290 of file Guards.h.

                                 {
            if ( 0 != m_svc ) { // if the service is not available, we cannot do anything
              m_svc->addRef(); // increase the reference counting
              if (0 != m_obj) {
                if (m_customEvtType) {
                  m_svc->before(m_cevt,m_obj);
                } else {
                  m_svc->before(m_evt,m_obj);
                }
              } else { // use object name
                if (m_customEvtType) {
                  m_svc->before(m_cevt,m_objName);
                } else {
                  m_svc->before(m_evt,m_objName);
                }
              }
            }
          }

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:

- /afs/.cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v22r2/GaudiKernel/GaudiKernel/Guards.h
- /afs/.cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v22r2/GaudiKernel/src/Lib/Guards.cpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines