| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# RegistryEntry.h

Go to the documentation of this file.

    00001 // $Id: RegistryEntry.h,v 1.8 2005/07/18 16:34:05 hmd Exp $
    00002 #ifndef GAUDIKERNEL_REGISTRYENTRY_H
    00003 #define GAUDIKERNEL_REGISTRYENTRY_H
    00004
    00005 // STL include files
    00006 #include <vector>
    00007
    00008 // Framework include files
    00009 #include "GaudiKernel/Kernel.h"
    00010 #include "GaudiKernel/IRegistry.h"
    00011
    00012 // Forward declarations
    00013 class DataSvc;
    00014 class DataObject;
    00015 class IDataProviderSvc;
    00016 class IOpaqueAddress;
    00017 class IDataStoreAgent;
    00018
    00019
    00020 namespace DataSvcHelpers   {
    00034   class RegistryEntry : public IRegistry  {
    00035   private:
    00037     typedef std::vector<IRegistry*> Store;
    00038   public:
    00039     friend class ::DataSvc;
    00041     typedef Store::const_iterator Iterator;
    00042   private:
    00044     unsigned long     m_refCount;
    00046     bool              m_isSoft;
    00048     std::string       m_fullpath;
    00050     std::string       m_path;
    00052     RegistryEntry*    m_pParent;
    00054     IOpaqueAddress*   m_pAddress;
    00056     DataObject*       m_pObject;
    00058     IDataProviderSvc* m_pDataProviderSvc;
    00060     Store             m_store;
    00061
    00062   private:
    00068
    00069     void  assemblePath(std::string& buffer)  const;
    00071     IRegistry* i_find ( const IRegistry* pDirectory )  const;
    00073     RegistryEntry* i_find ( const std::string& path )  const;
    00075     RegistryEntry* i_find ( const DataObject* pObject )  const;
    00077     RegistryEntry* i_add ( const std::string& name );
    00079     void setParent(RegistryEntry* pParent);
    00081     void setDataSvc(IDataProviderSvc* s)    {
    00082       m_pDataProviderSvc = s;
    00083     }
    00085     virtual RegistryEntry* parentEntry()   {
    00086       return m_pParent;
    00087     }
    00089     RegistryEntry* findLeaf(const std::string& path)  const    {
    00090       return i_find(path);
    00091     }
    00093     RegistryEntry* findLeaf(const DataObject* key)  const  {
    00094       return i_find(key);
    00095     }
    00097     void makeHard (DataObject* pObject);
    00099     void makeHard (IOpaqueAddress* pAddress);
    00101     void makeSoft (DataObject* pObject);
    00103     void makeSoft (IOpaqueAddress* pAddress);
    00104   public:
    00106     RegistryEntry(const std::string& path, RegistryEntry* parent = 0);
    00108     virtual ~RegistryEntry();
    00110     virtual unsigned long release();
    00112     virtual unsigned long addRef()    {
    00113       return ++m_refCount;
    00114     }
    00116     const std::string& name()  const  {
    00117       return m_path;
    00118     }
    00120     virtual const std::string& identifier()   const  {
    00121       return m_fullpath;
    00122     }
    00124     virtual IDataProviderSvc* dataSvc()  const {
    00125       return m_pDataProviderSvc;
    00126     }
    00128     virtual DataObject*     object()  const {
    00129       return m_pObject;
    00130     }
    00132     virtual IOpaqueAddress* address()   const  {
    00133       return m_pAddress;
    00134     }
    00136     virtual IRegistry* parent()   const  {
    00137       return m_pParent;
    00138     }
    00140     virtual bool isSoft()   const     {
    00141       return m_isSoft;
    00142     }
    00144     const Store& leaves()  const   {
    00145       return m_store;
    00146     }
    00148     virtual int             size()  const   {
    00149       return m_store.size();
    00150     }
    00152     virtual bool            isEmpty()  const    {
    00153       return m_store.size() == 0;
    00154     }
    00156     virtual Iterator   begin   ()   const  {
    00157       return m_store.begin();
    00158     }
    00160     virtual Iterator   end     ()   const  {
    00161       return m_store.end();
    00162     }
    00164     virtual IRegistry* find ( const IRegistry* obj )  const  {
    00165       return i_find(obj);
    00166     }
    00168     virtual IRegistry* find ( const std::string& path )  const  {
    00169       return i_find(path);
    00170     }
    00172     void setAddress(IOpaqueAddress* pAddress);
    00174     void setObject(DataObject* obj);
    00175
    00177     virtual long add(const std::string& name,
    00178                      DataObject* pObject,
    00179                      bool is_soft = false);
    00181     virtual long add(const std::string& name,
    00182                      IOpaqueAddress* pAddress,
    00183                      bool is_soft = false);
    00185     virtual long remove(const std::string& name);
    00187     virtual long add(IRegistry* obj);
    00189     virtual long remove(IRegistry* obj);
    00191     virtual long deleteElements();
    00193     virtual long traverseTree(IDataStoreAgent* pAgent, int level = 0);
    00194   };
    00195 }
    00196 #endif  // GAUDIKERNEL_REGISTRYENTRY_H