Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012

ThreadGaudi.cpp

Go to the documentation of this file.
00001 // -*-C++-*-
00002 // $Id: ThreadGaudi.cpp,v 1.4 2006/04/20 16:42:58 hmd Exp $
00003 // $Name:  $
00004 
00005 #include "GaudiKernel/ThreadGaudi.h"
00006 
00007 #include <sstream>
00008 
00009 #include <iostream>
00010 
00011 const std::string threadSeparator = "__" ;
00012 const std::string algToolSeparator = "." ;
00013 
00014 //
00015 //   getGaudiThreadIDfromName
00016 //   ------------------------
00017 
00018 std::string getGaudiThreadIDfromID(int iCopy) {
00019   std::ostringstream ost;
00020   ost << threadSeparator << iCopy << std::ends;
00021   return ost.str();
00022 }
00023 
00024 //
00025 //   getGaudiThreadIDfromName
00026 //   ------------------------
00027 
00028 std::string getGaudiThreadIDfromName(const std::string& name) {
00029   std::string threadAppendix = "" ;
00030 
00031   // find parent if name of an AlgTool
00032   std::string parent_name = name ;
00033   std::string tool_name  = "" ;
00034   size_t pp = name.find(".") ;
00035   if ( (pp > 0) && (pp <= name.length()) ) {
00036     parent_name = name.substr(0,name.find(".")-1) ;
00037     tool_name = name.substr(name.find("."));
00038   }
00039 
00040   // get from (parent_)name thread ID
00041   pp = parent_name.find(threadSeparator) ;
00042   if ( (pp > 0) && (pp <= parent_name.length()) ) {
00043     threadAppendix = parent_name.substr(parent_name.find(threadSeparator)) ;
00044   }
00045   return threadAppendix ;
00046 }
00047 
00048 //
00049 //   getGaudiThreadGenericName
00050 //   -------------------------
00051 
00052 std::string getGaudiThreadGenericName(const std::string& name) {
00053   std::string genericName = name ;
00054 
00055   // find parent if name of an AlgTool
00056   std::string parent_name = name ;
00057   std::string tool_name  = "" ;
00058   size_t pp = name.find(".") ;
00059   if ( (pp > 0) && (pp <= name.length()) ) {
00060     parent_name = name.substr(0,name.find(".")-1) ;
00061     tool_name = name.substr(name.find("."));
00062   }
00063 
00064   // construct gneric name
00065   pp = parent_name.find(threadSeparator) ;
00066   if ( (pp > 0) && (pp <= parent_name.length()) ) {
00067     genericName = parent_name.substr(0,parent_name.find(threadSeparator))+tool_name ;
00068   }
00069   return genericName ;
00070 }
00071 
00072 //
00073 //  isGaudiThreaded
00074 //
00075 bool isGaudiThreaded(const std::string& name) {
00076   return  (!(getGaudiThreadIDfromName(name).empty()));
00077 }
00078 
00079 //
00080 //   ThreadGaudi
00081 //   -----------
00082 
00083 ThreadGaudi* ThreadGaudiInstance = 0 ;
00084 
00085 ThreadGaudi::ThreadGaudi() {
00086   m_threadMap = new ThreadMap();
00087   (*m_threadMap)[0] = "" ;
00088 }
00089 
00090 ThreadGaudi::~ThreadGaudi() {
00091   delete m_threadMap;
00092 }
00093 
00094 ThreadGaudi* ThreadGaudi::instance() {
00095   if ( 0 == ThreadGaudiInstance ) {
00096     ThreadGaudiInstance = new ThreadGaudi();
00097   }
00098   return ThreadGaudiInstance ;
00099 }
00100 
00101 void ThreadGaudi::setThreadID(const std::string& threadID) {
00102   ThreadMap* p_threadMap = getThreadMap() ;
00103   // get from name thread ID
00104   System::ThreadHandle s_pid = System::threadSelf() ;
00105   if (p_threadMap->count(s_pid) == 0 ) {
00106     (*p_threadMap)[s_pid] = threadID ;
00107 #ifdef THREAD_GAUDI__DEBUG
00108     std::cout << " *** ThreadGaudi setThreadID *** value set for *** " << threadID << " thread ID : " << s_pid << std::endl ;
00109 #endif    
00110   }
00111 }
00112 
00113 ThreadGaudi::ThreadMap* ThreadGaudi::getThreadMap() {
00114   return ThreadGaudi::instance()->m_threadMap;
00115 }   
00116 
00117 const std::string& ThreadGaudi::getThreadID() {
00118   ThreadMap* p_threadMap = getThreadMap() ;
00119   System::ThreadHandle s_pid = System::threadSelf() ;
00120   if ( p_threadMap->find(s_pid) != p_threadMap->end() ) {
00121     return (*p_threadMap->find(s_pid)).second ;
00122   } else {
00123     return (*p_threadMap->find(0)).second ; ;
00124   }
00125 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Thu Jun 28 2012 23:27:25 for Gaudi Framework, version v23r2 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004