Gaudi Framework, version v21r4

Home   Generated: 7 Sep 2009

StatusCode.cpp

Go to the documentation of this file.
00001 #define GAUDIKERNEL_STATUSCODE_CPP 1
00002 
00003 #include "GaudiKernel/StatusCode.h"
00004 #include "GaudiKernel/System.h"
00005 #include "GaudiKernel/Bootstrap.h"
00006 #include "GaudiKernel/IMessageSvc.h"
00007 #include "GaudiKernel/IStatusCodeSvc.h"
00008 #include "GaudiKernel/ISvcLocator.h"
00009 #include "GaudiKernel/MsgStream.h"
00010 #include "GaudiKernel/IssueSeverity.h"
00011 #include <fstream>
00012 #include <iostream>
00013 #include <sstream>
00014 #include <stdlib.h>
00015 
00016 bool StatusCode::s_checking(false);
00017 
00018 void StatusCode::enableChecking() {
00019   s_checking = true;
00020 }
00021 
00022 void StatusCode::disableChecking() {
00023   s_checking = false;
00024 }
00025 
00026 IssueSeverity* StatusCode::cloneSeverity(const IssueSeverity* sev)
00027 {
00028   if( sev ) return new IssueSeverity(*sev);
00029   else      return 0;
00030 }
00031 
00032 const IssueSeverity& StatusCode::severity() const {
00033   static IssueSeverity dummy;
00034   if (m_severity) return *m_severity;
00035   else            return dummy;
00036 }
00037 
00038 StatusCode::~StatusCode() {
00039   if(s_checking) {
00040 
00041     if (!m_checked ) {
00042 
00043       SmartIF<IMessageSvc> msg(Gaudi::svcLocator());
00044 
00045       SmartIF<IStatusCodeSvc> scs(Gaudi::svcLocator()->service("StatusCodeSvc"));
00046 
00047       const size_t depth = 21;
00048       void* addresses[depth];
00049 
00050       std::string lib, fnc;
00051       void* addr = 0;
00053       if (System::backTrace(addresses, depth)) {
00054 
00055         if (System::getStackLevel(addresses[2], addr, fnc, lib)) {
00056 
00057           if (scs) {
00058             scs->regFnc(fnc,lib);
00059           } else {
00060             if (msg) {
00061               MsgStream log(msg,"StatusCode");
00062               log << MSG::WARNING << "Unchecked in " << fnc << " " << lib << endmsg;
00063             } else {
00064               std::cout << MSG::WARNING << "Unchecked in " << fnc << " " << lib << std::endl;
00065             }
00066           }
00067 
00068         }
00069 
00070       }
00071     }
00072   }
00073   if (m_severity) delete m_severity;
00074 }
00075 

Generated at Mon Sep 7 18:05:44 2009 for Gaudi Framework, version v21r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004