Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

LinkManager.h

Go to the documentation of this file.
00001 #ifndef GAUDIKERNEL_LINKMANAGER_H
00002 #define GAUDIKERNEL_LINKMANAGER_H
00003 
00004 // STL includes
00005 #include <vector>
00006 #include <string>
00007 // Gaudi
00008 #include "GaudiKernel/Kernel.h"
00009 
00010 class DataObject;
00011 class IOpaqueAddress;
00012 
00020 class GAUDI_API LinkManager {
00021 
00022 public:
00024   enum DirLinkType {INVALID, VALID};
00025 
00030   class Link  {
00032     friend class LinkManager;
00033   protected:
00035     std::string m_path;
00037     DataObject* m_pObject;
00039     long        m_id;
00040   public:
00042     Link(long id, const std::string& path, const DataObject* pObject=0)
00043     : m_path(path), m_id(id) {
00044       setObject(pObject);
00045     }
00047     Link() : m_path(""), m_pObject(0), m_id(INVALID) {
00048     }
00050     Link& operator=(const Link& link)  {
00051       setObject(link.m_pObject);
00052       m_path = link.m_path;
00053       m_id   = link.m_id;
00054       return *this;
00055     }
00057     virtual ~Link() {
00058     }
00060     void set(long id, const std::string& path, const DataObject* pObject)   {
00061       setObject(pObject);
00062       m_path = path;
00063       m_id   = id;
00064     }
00066     bool operator==(const Link& link)  const  {
00067       return link.m_path == m_path;
00068     }
00070     void setObject(const DataObject* pObject)   {
00071       m_pObject = const_cast<DataObject*>(pObject);
00072     }
00074     DataObject* object()  const  {
00075       return m_pObject;
00076     }
00078     const std::string& path()   const   {
00079       return m_path;
00080     }
00082     long ID()  const    {
00083       return m_id;
00084     }
00086     virtual IOpaqueAddress* address();
00087   };
00088   typedef std::vector<Link*>           LinkVector;
00090   typedef LinkVector::iterator         LinkIterator;
00092   typedef LinkVector::const_iterator   ConstLinkIterator;
00093 
00095   mutable LinkVector m_linkVector;
00096 
00097 public:
00099   LinkManager();
00101   virtual ~LinkManager();
00103   static LinkManager* newInstance();
00105   static void setInstantiator( LinkManager* (*newInstance)() );
00107   long size()   const   {
00108     return m_linkVector.size();
00109   }
00111   Link* link(long id);
00113   Link* link(const DataObject* pObject);
00115   Link* link(const std::string& path);
00117   long addLink(const std::string& path, const DataObject* pObject)   const;
00119   long removeLink(const DataObject* pObject)   const;
00121   long removeLink(const std::string& fullPath)   const;
00123   long removeLink(long id)   const;
00125   void clearLinks();
00126 };
00127 #endif // GAUDIKERNEL_LINKMANAGER_H

Generated at Mon May 3 12:14:18 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004