Gaudi Framework, version v20r4

Generated: 8 Jan 2009

StatusCodeSvc Class Reference

#include <StatusCodeSvc.h>

Inheritance diagram for StatusCodeSvc:

Inheritance graph
[legend]
Collaboration diagram for StatusCodeSvc:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 14 of file StatusCodeSvc.h.


Public Member Functions

virtual StatusCode initialize ()
 Initialization (from CONFIGURED to INITIALIZED).
virtual StatusCode reinitialize ()
 Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).
virtual StatusCode finalize ()
 Finalize (from INITIALIZED to CONFIGURED).
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)
 Query interfaces of Interface.
virtual void regFnc (const std::string &func, const std::string &lib)
virtual void list () const
virtual bool suppressCheck () const
 StatusCodeSvc (const std::string &name, ISvcLocator *svc)
virtual ~StatusCodeSvc ()

Private Member Functions

void filterFnc (std::string)

Private Attributes

StringArrayProperty m_pFilter
BooleanProperty m_abort
BooleanProperty m_suppress
std::map< std::string,
StatCodeDat
m_dat
std::set< std::string > m_filter

Friends

class SvcFactory< StatusCodeSvc >

Classes

struct  StatCodeDat

Constructor & Destructor Documentation

StatusCodeSvc::StatusCodeSvc ( const std::string &  name,
ISvcLocator svc 
)

Definition at line 15 of file StatusCodeSvc.cpp.

00016   : Service( name, svc )
00017 {
00018 
00019   declareProperty("Filter",m_pFilter);
00020   declareProperty("AbortOnError",m_abort=false);
00021   declareProperty("SuppressCheck", m_suppress=false);
00022 
00023 }

StatusCodeSvc::~StatusCodeSvc (  )  [virtual]

Definition at line 27 of file StatusCodeSvc.cpp.

00027                               {
00028   
00029 }


Member Function Documentation

StatusCode StatusCodeSvc::initialize (  )  [virtual]

Initialization (from CONFIGURED to INITIALIZED).

Reimplemented from Service.

Definition at line 56 of file StatusCodeSvc.cpp.

00056                           {
00057 
00058   StatusCode sc = Service::initialize();
00059   if (!sc.isSuccess()) return sc;
00060   
00061   MsgStream log( msgSvc(), name() );
00062   log << MSG::INFO << "initialize" << endreq;
00063 
00064   std::vector<std::string>::const_iterator itr;
00065   for (itr = m_pFilter.value().begin(); itr != m_pFilter.value().end(); ++itr) {
00066     // we need to do this if someone has gotten to regFnc before initialize
00067     filterFnc(*itr);
00068 
00069     m_filter.insert(*itr);
00070   }
00071 
00072   return StatusCode::SUCCESS;
00073 
00074 }

StatusCode StatusCodeSvc::reinitialize (  )  [virtual]

Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).

Reimplemented from Service.

Definition at line 79 of file StatusCodeSvc.cpp.

00079                             {
00080 
00081   MsgStream log( msgSvc(), name() );
00082   log << MSG::INFO << "reinitialize" << endreq;
00083 
00084   return StatusCode::SUCCESS;
00085 
00086 }

StatusCode StatusCodeSvc::finalize (  )  [virtual]

Finalize (from INITIALIZED to CONFIGURED).

Reimplemented from Service.

Definition at line 90 of file StatusCodeSvc.cpp.

00090                         {
00091 
00092   if (m_dat.size() > 0) {
00093     MsgStream log( msgSvc(), name() );
00094 
00095     log << MSG::INFO << "listing all unchecked return codes:" << endreq;
00096     
00097     list();
00098 
00099   }
00100 
00101   return StatusCode::SUCCESS;
00102 
00103 }

StatusCode StatusCodeSvc::queryInterface ( const InterfaceID riid,
void **  ppvUnknown 
) [virtual]

Query interfaces of Interface.

Parameters:
riid ID of Interface to be retrieved
ppvUnknown Pointer to Location for interface pointer

Reimplemented from Service.

Definition at line 33 of file StatusCodeSvc.cpp.

00035 {
00036   StatusCode sc = StatusCode::FAILURE;
00037   if ( ppvInterface ) {
00038     *ppvInterface = 0;
00039     
00040     if ( IStatusCodeSvc::interfaceID().versionMatch(riid) )    {
00041       //    if ( riid == IID_StatusCodeSvc ) {
00042       *ppvInterface = static_cast<IStatusCodeSvc*>(this);
00043       sc = StatusCode::SUCCESS;
00044       addRef();
00045     }
00046     else
00047       sc = Service::queryInterface( riid, ppvInterface );    
00048   }
00049   return sc;
00050 }

void StatusCodeSvc::regFnc ( const std::string &  func,
const std::string &  lib 
) [virtual]

Implements IStatusCodeSvc.

Definition at line 110 of file StatusCodeSvc.cpp.

00110                                                                 {
00111 
00112   if (m_state == Gaudi::StateMachine::OFFLINE || 
00113       m_state == Gaudi::StateMachine::CONFIGURED) {
00114     return;
00115   }
00116 
00117   if (m_filter.find(fnc) != m_filter.end()) {
00118     return;
00119   }
00120 
00121   if (m_abort) {
00122     MsgStream log( msgSvc(), name() );
00123     log << MSG::FATAL << "Unchecked StatusCode in " << fnc << " from lib "
00124         << lib << endreq;
00125     abort();
00126   }
00127 
00128   string key = fnc + lib;
00129 
00130   map<string,StatCodeDat>::iterator itr = m_dat.find(key);
00131 
00132   if (itr != m_dat.end()) {
00133     itr->second.count += 1;
00134   } else {
00135 
00136     int i1 = lib.rfind("/",lib.length());
00137     string rlib = lib.substr(i1+1,lib.length()-i1-1);
00138 
00139     StatCodeDat dat;
00140     dat.fnc = fnc;
00141     dat.lib = rlib;
00142     dat.count = 1;
00143 
00144     m_dat[key] = dat;
00145   }
00146 
00147 }

void StatusCodeSvc::list (  )  const [virtual]

Implements IStatusCodeSvc.

Definition at line 152 of file StatusCodeSvc.cpp.

00152                           {
00153 
00154   MsgStream log( msgSvc(), name() );
00155   log << MSG::INFO << endl;
00156 
00157   map<string,StatCodeDat>::const_iterator itr;
00158 
00159 #if defined (__GNUC__) && ( __GNUC__ <= 2 )
00160   std::ostrstream os;
00161 #else
00162   std::ostringstream os;
00163 #endif
00164 
00165   os << "Num | Function                       | Source Library" << endl;
00166   os << "----+--------------------------------+-------------------" 
00167      << "-----------------------" << endl;
00168 
00169 
00170   for(itr = m_dat.begin(); itr != m_dat.end(); ++itr ) {
00171     StatCodeDat dat = itr->second;
00172 
00173     os.width(3);
00174     os.setf(ios_base::right,ios_base::adjustfield);
00175     os << dat.count;
00176 
00177     os << " | ";
00178     os.width(30);
00179     os.setf(ios_base::left,ios_base::adjustfield);
00180     os << dat.fnc;
00181 
00182     os << " | ";
00183     os.setf(ios_base::left,ios_base::adjustfield);
00184     os << dat.lib;
00185 
00186     os << endl;
00187 
00188   }
00189 
00190 
00191   log << os.str() << endreq;
00192    
00193 }

virtual bool StatusCodeSvc::suppressCheck (  )  const [inline, virtual]

Implements IStatusCodeSvc.

Definition at line 29 of file StatusCodeSvc.h.

00029 { return m_suppress.value() ; }

void StatusCodeSvc::filterFnc ( std::string  str  )  [private]

Definition at line 198 of file StatusCodeSvc.cpp.

00198                                       {
00199 
00200   std::map<std::string, StatCodeDat>::iterator itr;
00201   for (itr = m_dat.begin(); itr != m_dat.end(); ++itr ) {
00202     if (itr->second.fnc == str) {
00203       m_dat.erase(itr);
00204       return;
00205     }
00206       
00207   }
00208 
00209 }


Friends And Related Function Documentation

friend class SvcFactory< StatusCodeSvc > [friend]

Definition at line 48 of file StatusCodeSvc.h.


Member Data Documentation

Definition at line 50 of file StatusCodeSvc.h.

Definition at line 51 of file StatusCodeSvc.h.

Definition at line 52 of file StatusCodeSvc.h.

std::map<std::string,StatCodeDat> StatusCodeSvc::m_dat [private]

Definition at line 54 of file StatusCodeSvc.h.

std::set<std::string> StatusCodeSvc::m_filter [private]

Definition at line 55 of file StatusCodeSvc.h.


The documentation for this class was generated from the following files:

Generated at Thu Jan 8 17:52:30 2009 for Gaudi Framework, version v20r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004