Gaudi Framework, version v20r4

Generated: 8 Jan 2009

LinkManager.cpp

Go to the documentation of this file.
00001 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiKernel/src/Lib/LinkManager.cpp,v 1.3 2004/01/23 11:22:04 mato Exp $
00002 
00003 // Experiment specific include files
00004 #include "GaudiKernel/LinkManager.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/IRegistry.h"
00007 
00008 static LinkManager* (*s_newInstance)() = 0;
00009 
00011 IOpaqueAddress* LinkManager::Link::address() {
00012   if ( 0 != m_pObject )   {
00013     IRegistry* pReg = m_pObject->registry();
00014     if ( 0 != pReg )    {
00015       return pReg->address();
00016     }
00017   }
00018   return 0;
00019 }
00020 
00022 void LinkManager::setInstantiator( LinkManager* (*newInstance)() ) {
00023   s_newInstance = newInstance;
00024 }
00025 
00027 LinkManager* LinkManager::newInstance()  {
00028   return s_newInstance ? (*s_newInstance)() : new LinkManager();
00029 }
00030 
00032 LinkManager::LinkManager()  {
00033 }
00034 
00036 LinkManager::~LinkManager()    {
00037   clearLinks();
00038 }
00039 
00041 LinkManager::Link* LinkManager::link(long id)    {
00042   return (0<=id && (unsigned)id < m_linkVector.size()) ? m_linkVector[id] : 0;
00043 }
00044 
00046 LinkManager::Link* LinkManager::link(const DataObject* pObject)  {
00047   if ( 0 != pObject )   {
00048     for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00049       if ( (*i)->object() == pObject )    {
00050         return (*i);
00051       }
00052     }
00053   }
00054   return 0;
00055 }
00056 
00058 LinkManager::Link* LinkManager::link(const std::string& path)  {
00059   if ( 0 != path.length() )   {
00060     for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00061       if ( (*i)->path() == path )    {
00062         return (*i);
00063       }
00064     }
00065   }
00066   return 0;
00067 }
00068 
00070 long LinkManager::addLink(const std::string& path, const DataObject* pObject)   const   {
00071   long n = 0;
00072   for ( LinkVector::const_iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00073     Link* lnk = *i;
00074     const DataObject* pO = lnk->object();
00075     if ( 0 != pO && pO == pObject )   {
00076       return n;
00077     }
00078     bool same_path = lnk->path() == path;
00079     if ( same_path ) {
00080       if ( 0 != pObject && pObject != pO )  {
00081         lnk->setObject(pObject);
00082       }
00083       return n;
00084     }
00085     n++;
00086   }
00087   // Link is completely unknown
00088   Link* link = new Link(m_linkVector.size(), path, pObject);
00089   m_linkVector.push_back( link );
00090   return link->ID();
00091 }
00092 
00093 // Remove a link by object reference
00094 long LinkManager::removeLink(const DataObject* pObject)  const  {
00095   long n = 0;
00096   for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00097     if ( (*i)->object() == pObject )    {
00098       delete (*i);
00099       m_linkVector.erase(i);
00100       return n;
00101     }
00102     n++;
00103   }
00104   return INVALID;
00105 }
00106 
00107 // Remove a link by object reference
00108 long LinkManager::removeLink(const std::string& path)  const  {
00109   long n = 0;
00110   for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00111     if ( (*i)->path() == path )    {
00112       delete (*i);
00113       m_linkVector.erase(i);
00114       return n;
00115     }
00116     n++;
00117   }
00118   return INVALID;
00119 }
00120 
00121 // Remove a link by object reference
00122 long LinkManager::removeLink(long id)  const  {
00123   LinkVector::iterator i = m_linkVector.begin();
00124   i += id;
00125   delete (*i);
00126   m_linkVector.erase(i);
00127   return id;
00128   return INVALID;
00129 }
00130 
00132 void LinkManager::clearLinks()  {
00133   for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ )   {
00134     delete (*i);
00135   }
00136   m_linkVector.erase(m_linkVector.begin(), m_linkVector.end());
00137 }

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