![]() |
|
|
Generated: 18 Jul 2008 |
#include <GaudiKernel/RegistryEntry.h>
Inheritance diagram for DataSvcHelpers::RegistryEntry:


The RegistryEntry represents an entry of the transient data store. The object holds the recipe how to retrieve objects from the persistent world (member IOpaqueAddress) as well as the backward link to the parent entry and the leaves.
Definition at line 34 of file RegistryEntry.h.
Public Types | |
| typedef Store::const_iterator | Iterator |
| Iterator definition. | |
Public Member Functions | |
| RegistryEntry (const std::string &path, RegistryEntry *parent=0) | |
| Standard Constructor. | |
| virtual | ~RegistryEntry () |
| Standard Destructor. | |
| virtual unsigned long | release () |
| IInterface implementation: Reference the object. | |
| virtual unsigned long | addRef () |
| IInterface implementation: Dereference the object. | |
| const std::string & | name () const |
| Retrieve name of the entry. | |
| virtual const std::string & | identifier () const |
| Full identifier (or key). | |
| virtual IDataProviderSvc * | dataSvc () const |
| Retrieve pointer to Transient Store. | |
| virtual DataObject * | object () const |
| Retrive object behind the link. | |
| virtual IOpaqueAddress * | address () const |
| Retrieve opaque storage address. | |
| virtual IRegistry * | parent () const |
| Pointer to parent directory entry. | |
| virtual bool | isSoft () const |
| Is the link soft or hard. | |
| const Store & | leaves () const |
| Access the leaves of the object. | |
| virtual int | size () const |
| Return the size of the container(=number of objects). | |
| virtual bool | isEmpty () const |
| Simple check if the Container is empty. | |
| virtual Iterator | begin () const |
| Return starting point for container iteration. | |
| virtual Iterator | end () const |
| Return end elemtn if the container. | |
| virtual IRegistry * | find (const IRegistry *obj) const |
| Try to find an object identified by its pointer. | |
| virtual IRegistry * | find (const std::string &path) const |
| Try to find an object identified by its relative name to the directory. | |
| void | setAddress (IOpaqueAddress *pAddress) |
| Set/Update Opaque address. | |
| void | setObject (DataObject *obj) |
| Set/Update object address. | |
| virtual long | add (const std::string &name, DataObject *pObject, bool is_soft=false) |
| Add entry to data store. | |
| virtual long | add (const std::string &name, IOpaqueAddress *pAddress, bool is_soft=false) |
| Add entry to data store. | |
| virtual long | remove (const std::string &name) |
| Remove an entry from the store. | |
| virtual long | add (IRegistry *obj) |
| Add object to the container. | |
| virtual long | remove (IRegistry *obj) |
| Remove an object from the container. | |
| virtual long | deleteElements () |
| Delete all contained elements. | |
| virtual long | traverseTree (IDataStoreAgent *pAgent, int level=0) |
| traverse data tree | |
Private Types | |
| typedef std::vector< IRegistry * > | Store |
| Definition of datastore type. | |
Private Member Functions | |
| void | assemblePath (std::string &buffer) const |
| Recursive helper to assemble the full path name of the entry. | |
| IRegistry * | i_find (const IRegistry *pDirectory) const |
| Internal method to retrieve data directory. | |
| RegistryEntry * | i_find (const std::string &path) const |
| Internal method to retrieve data directory. | |
| RegistryEntry * | i_find (const DataObject *pObject) const |
| Internal method to locate object entry. | |
| RegistryEntry * | i_add (const std::string &name) |
| Internal method to add entries. | |
| void | setParent (RegistryEntry *pParent) |
| Set new parent pointer. | |
| void | setDataSvc (IDataProviderSvc *s) |
| Set the transient data store. | |
| virtual RegistryEntry * | parentEntry () |
| Pointer to parent registry entry. | |
| RegistryEntry * | findLeaf (const std::string &path) const |
| Find identified leaf in this registry node. | |
| RegistryEntry * | findLeaf (const DataObject *key) const |
| Find identified leaf in this registry node. | |
| void | makeHard (DataObject *pObject) |
| Initialize link as hard link. | |
| void | makeHard (IOpaqueAddress *pAddress) |
| Initialize link as hard link. | |
| void | makeSoft (DataObject *pObject) |
| Initialize link as soft link. | |
| void | makeSoft (IOpaqueAddress *pAddress) |
| Initialize link as soft link. | |
Private Attributes | |
| unsigned long | m_refCount |
| Reference counter. | |
| bool | m_isSoft |
| Is the link soft or hard? | |
| std::string | m_fullpath |
| String containing full path of the object (volatile). | |
| std::string | m_path |
| Path name. | |
| RegistryEntry * | m_pParent |
| Pointer to parent. | |
| IOpaqueAddress * | m_pAddress |
| Pointer to opaque address (load info). | |
| DataObject * | m_pObject |
| Pointer to object. | |
| IDataProviderSvc * | m_pDataProviderSvc |
| Pointer to hosting transient store. | |
| Store | m_store |
| Store of leaves. | |
Friends | |
| class | ::DataSvc |
typedef std::vector<IRegistry*> DataSvcHelpers::RegistryEntry::Store [private] |
| DataSvcHelpers::RegistryEntry::RegistryEntry | ( | const std::string & | path, | |
| RegistryEntry * | parent = 0 | |||
| ) |
Standard Constructor.
Definition at line 45 of file RegistryEntry.cpp.
References addRef(), assemblePath(), std::basic_string< _CharT, _Traits, _Alloc >::begin(), std::basic_string< _CharT, _Traits, _Alloc >::erase(), std::basic_string< _CharT, _Traits, _Alloc >::insert(), m_fullpath, m_path, std::basic_string< _CharT, _Traits, _Alloc >::npos, Gaudi::Utils::Histos::path(), std::basic_string< _CharT, _Traits, _Alloc >::rfind(), and SEPARATOR.
Referenced by i_add().
00046 : m_refCount(0), 00047 m_isSoft(false), 00048 m_path(path), 00049 m_pParent(parent), 00050 m_pAddress(0), 00051 m_pObject(0), 00052 m_pDataProviderSvc(0) 00053 { 00054 std::string::size_type sep = m_path.rfind(SEPARATOR); 00055 if ( path[0] != SEPARATOR ) { 00056 m_path.insert(m_path.begin(), SEPARATOR); 00057 } 00058 if ( sep != std::string::npos ) { 00059 m_path.erase(0,sep); 00060 } 00061 assemblePath(m_fullpath); 00062 addRef(); 00063 }
| DataSvcHelpers::RegistryEntry::~RegistryEntry | ( | ) | [virtual] |
Standard Destructor.
Definition at line 66 of file RegistryEntry.cpp.
References deleteElements(), m_isSoft, m_pAddress, m_pObject, IOpaqueAddress::release(), DataObject::release(), IOpaqueAddress::setRegistry(), and DataObject::setRegistry().
00066 { 00067 deleteElements(); 00068 if ( 0 != m_pObject ) { 00069 if ( !m_isSoft ) m_pObject->setRegistry(0); 00070 m_pObject->release(); 00071 } 00072 if ( 0 != m_pAddress ) { 00073 if ( !m_isSoft ) m_pAddress->setRegistry(0); 00074 m_pAddress->release(); 00075 } 00076 }
| void DataSvcHelpers::RegistryEntry::assemblePath | ( | std::string & | buffer | ) | const [private] |
Recursive helper to assemble the full path name of the entry.
Definition at line 340 of file RegistryEntry.cpp.
References assemblePath(), m_path, and m_pParent.
Referenced by assemblePath(), RegistryEntry(), and setParent().
00340 { 00341 if ( m_pParent != 0 ) { 00342 m_pParent->assemblePath(buffer); 00343 } 00344 buffer += m_path; 00345 }
Internal method to retrieve data directory.
Definition at line 246 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), std::vector< _Tp, _Alloc >::end(), std::find(), and m_store.
Referenced by find(), findLeaf(), and i_find().
00246 { 00247 Store::const_iterator i = std::find(m_store.begin(),m_store.end(),obj); 00248 return (i==m_store.end()) ? 0 : (*i); 00249 }
| DataSvcHelpers::RegistryEntry * DataSvcHelpers::RegistryEntry::i_find | ( | const std::string & | path | ) | const [private] |
Internal method to retrieve data directory.
Definition at line 252 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), std::basic_string< _CharT, _Traits, _Alloc >::begin(), CAST_REGENTRY, std::basic_string< _CharT, _Traits, _Alloc >::data(), std::vector< _Tp, _Alloc >::end(), std::equal(), std::basic_string< _CharT, _Traits, _Alloc >::find(), i_find(), std::basic_string< _CharT, _Traits, _Alloc >::insert(), std::basic_string< _CharT, _Traits, _Alloc >::length(), m_path, m_store, std::basic_string< _CharT, _Traits, _Alloc >::npos, Gaudi::Utils::Histos::path(), and SEPARATOR.
00252 { 00253 if ( path[0] != SEPARATOR ) { 00254 std::string thePath = path; 00255 thePath.insert(thePath.begin(), SEPARATOR); 00256 return i_find(thePath); 00257 } 00258 else { 00259 std::string::size_type len = path.length(); 00260 std::string::size_type loc1 = path.find(SEPARATOR,1); 00261 std::string::size_type len2 = loc1 != std::string::npos ? loc1 : len; 00262 const char* data = path.data(); 00263 for (Store::const_iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00264 RegistryEntry* regEnt = CAST_REGENTRY(RegistryEntry*, *i); 00265 const std::string& nam = regEnt->name(); 00266 if ( nam.length() == len2 ) { 00267 if ( std::equal(nam.begin(), nam.begin()+len2, data) ) { 00268 try { 00269 if ( loc1 != std::string::npos ) { 00270 std::string search_path(path, loc1, len); 00271 IRegistry* pDir = regEnt->find(search_path); 00272 if ( 0 != pDir ) { 00273 return CAST_REGENTRY(RegistryEntry*, pDir); 00274 } 00275 return 0; 00276 } 00277 else { 00278 return CAST_REGENTRY(RegistryEntry*, *i); 00279 } 00280 } 00281 catch (...) { 00282 } 00283 } 00284 } 00285 } 00286 if ( m_path.length() == len2 ) { 00287 if ( std::equal(m_path.begin(), m_path.begin()+len2, data) ) { 00288 if (len2 < len) { 00289 std::string search_path(path, loc1, len); 00290 return i_find(search_path); 00291 } 00292 //return this; 00293 } 00294 } 00295 } 00296 return 0; 00297 }
| DataSvcHelpers::RegistryEntry * DataSvcHelpers::RegistryEntry::i_find | ( | const DataObject * | pObject | ) | const [private] |
Internal method to locate object entry.
Definition at line 300 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), CAST_REGENTRY, std::vector< _Tp, _Alloc >::end(), i_find(), m_pObject, m_store, and DataObject::registry().
00300 { 00301 if ( 0 != key ) { 00302 if ( key == m_pObject ) { 00303 return const_cast<RegistryEntry*>(this); 00304 } 00305 // Look in the immediate level: 00306 RegistryEntry *result = CAST_REGENTRY(RegistryEntry*, i_find(key->registry())); 00307 if ( 0 != result ) return result; 00308 // Go levels down 00309 for (Store::const_iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00310 try { 00311 const RegistryEntry *entry = CAST_REGENTRY(RegistryEntry*, *i); 00312 if( 0 != (result = entry->i_find(key)) ) 00313 return result; 00314 } 00315 catch ( ... ) { } 00316 } 00317 } 00318 return 0; 00319 }
| DataSvcHelpers::RegistryEntry * DataSvcHelpers::RegistryEntry::i_add | ( | const std::string & | name | ) | [private] |
Internal method to add entries.
Definition at line 179 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), std::basic_string< _CharT, _Traits, _Alloc >::begin(), std::vector< _Tp, _Alloc >::end(), std::basic_string< _CharT, _Traits, _Alloc >::insert(), m_store, Gaudi::Utils::Histos::path(), RegistryEntry(), and SEPARATOR.
Referenced by add().
00179 { 00180 if ( nam[0] != SEPARATOR ) { 00181 std::string path = nam; 00182 path.insert(path.begin(), SEPARATOR); 00183 return i_add(path); 00184 } 00185 // if this object is already present, this is an error.... 00186 for (Store::iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00187 if ( nam == (*i)->name() ) { 00188 return 0; 00189 } 00190 } 00191 return new RegistryEntry( nam, this ); 00192 }
| void DataSvcHelpers::RegistryEntry::setParent | ( | RegistryEntry * | pParent | ) | [private] |
Set new parent pointer.
Definition at line 88 of file RegistryEntry.cpp.
References assemblePath(), m_fullpath, and m_pParent.
Referenced by add().
00088 { 00089 m_pParent = pParent; 00090 m_fullpath = ""; 00091 assemblePath(m_fullpath); 00092 }
| void DataSvcHelpers::RegistryEntry::setDataSvc | ( | IDataProviderSvc * | s | ) | [inline, private] |
Set the transient data store.
Definition at line 81 of file RegistryEntry.h.
References m_pDataProviderSvc, and Gaudi::Units::s.
Referenced by add(), and DataSvc::i_setRoot().
00081 { 00082 m_pDataProviderSvc = s; 00083 }
| virtual RegistryEntry* DataSvcHelpers::RegistryEntry::parentEntry | ( | ) | [inline, private, virtual] |
Pointer to parent registry entry.
Definition at line 85 of file RegistryEntry.h.
References m_pParent.
Referenced by DataSvc::clearSubTree(), and DataSvc::unregisterObject().
00085 { 00086 return m_pParent; 00087 }
| RegistryEntry* DataSvcHelpers::RegistryEntry::findLeaf | ( | const std::string & | path | ) | const [inline, private] |
Find identified leaf in this registry node.
Definition at line 89 of file RegistryEntry.h.
References i_find(), and Gaudi::Utils::Histos::path().
Referenced by DataSvc::handleDataFault(), DataSvc::linkObject(), DataSvc::registerAddress(), DataSvc::registerObject(), DataSvc::retrieveEntry(), DataSvc::unlinkObject(), DataSvc::unregisterAddress(), and DataSvc::unregisterObject().
| RegistryEntry* DataSvcHelpers::RegistryEntry::findLeaf | ( | const DataObject * | key | ) | const [inline, private] |
Find identified leaf in this registry node.
Definition at line 93 of file RegistryEntry.h.
References i_find().
00093 { 00094 return i_find(key); 00095 }
| void DataSvcHelpers::RegistryEntry::makeHard | ( | DataObject * | pObject | ) | [private] |
Initialize link as hard link.
Definition at line 110 of file RegistryEntry.cpp.
References m_isSoft, m_pAddress, m_pObject, makeSoft(), IOpaqueAddress::setRegistry(), and DataObject::setRegistry().
Referenced by add(), and DataSvc::i_setRoot().
00110 { 00111 makeSoft(pObject); 00112 m_isSoft = false; 00113 if ( 0 != m_pObject ) { 00114 m_pObject->setRegistry(this); 00115 } 00116 if ( 0 != m_pAddress ) { 00117 m_pAddress->setRegistry(this); 00118 } 00119 }
| void DataSvcHelpers::RegistryEntry::makeHard | ( | IOpaqueAddress * | pAddress | ) | [private] |
Initialize link as hard link.
Definition at line 122 of file RegistryEntry.cpp.
References m_isSoft, and setAddress().
00122 { 00123 m_isSoft = false; 00124 setAddress(pAddress); 00125 }
| void DataSvcHelpers::RegistryEntry::makeSoft | ( | DataObject * | pObject | ) | [private] |
Initialize link as soft link.
Definition at line 95 of file RegistryEntry.cpp.
References m_isSoft, and setObject().
Referenced by add(), and makeHard().
00095 { 00096 m_isSoft = true; 00097 setObject(pObject); 00098 // if ( 0 != m_pObject ) { // Useless: This justs sets my own address again... 00099 // setAddress(m_pObject->address()); 00100 // } 00101 }
| void DataSvcHelpers::RegistryEntry::makeSoft | ( | IOpaqueAddress * | pAddress | ) | [private] |
Initialize link as soft link.
Definition at line 104 of file RegistryEntry.cpp.
References m_isSoft, and setAddress().
00104 { 00105 m_isSoft = true; 00106 setAddress(pAddress); 00107 }
| unsigned long DataSvcHelpers::RegistryEntry::release | ( | ) | [virtual] |
IInterface implementation: Reference the object.
Implements IRegistry.
Definition at line 79 of file RegistryEntry.cpp.
References m_refCount.
Referenced by DataSvc::clearStore(), and remove().
00079 { 00080 unsigned long cnt = --m_refCount; 00081 if ( 0 == m_refCount ) { 00082 delete this; 00083 } 00084 return cnt; 00085 }
| virtual unsigned long DataSvcHelpers::RegistryEntry::addRef | ( | ) | [inline, virtual] |
IInterface implementation: Dereference the object.
Implements IRegistry.
Definition at line 112 of file RegistryEntry.h.
References m_refCount.
Referenced by RegistryEntry().
00112 { 00113 return ++m_refCount; 00114 }
| const std::string& DataSvcHelpers::RegistryEntry::name | ( | ) | const [inline, virtual] |
| virtual const std::string& DataSvcHelpers::RegistryEntry::identifier | ( | ) | const [inline, virtual] |
Full identifier (or key).
Implements IRegistry.
Definition at line 120 of file RegistryEntry.h.
References m_fullpath.
Referenced by DataSvc::handleDataFault(), and DataSvc::registerAddress().
00120 { 00121 return m_fullpath; 00122 }
| virtual IDataProviderSvc* DataSvcHelpers::RegistryEntry::dataSvc | ( | ) | const [inline, virtual] |
Retrieve pointer to Transient Store.
Implements IRegistry.
Definition at line 124 of file RegistryEntry.h.
References m_pDataProviderSvc.
00124 { 00125 return m_pDataProviderSvc; 00126 }
| virtual DataObject* DataSvcHelpers::RegistryEntry::object | ( | ) | const [inline, virtual] |
Retrive object behind the link.
Implements IRegistry.
Definition at line 128 of file RegistryEntry.h.
References m_pObject.
Referenced by DataSvc::findObject(), DataSvc::registerObject(), DataSvc::retrieveEntry(), DataSvc::retrieveObject(), and DataSvc::unregisterObject().
00128 { 00129 return m_pObject; 00130 }
| virtual IOpaqueAddress* DataSvcHelpers::RegistryEntry::address | ( | ) | const [inline, virtual] |
Retrieve opaque storage address.
Implements IRegistry.
Definition at line 132 of file RegistryEntry.h.
References m_pAddress.
Referenced by add().
00132 { 00133 return m_pAddress; 00134 }
| virtual IRegistry* DataSvcHelpers::RegistryEntry::parent | ( | ) | const [inline, virtual] |
Pointer to parent directory entry.
Definition at line 136 of file RegistryEntry.h.
References m_pParent.
Referenced by DataSvc::objectParent(), and DataSvc::unregisterAddress().
00136 { 00137 return m_pParent; 00138 }
| virtual bool DataSvcHelpers::RegistryEntry::isSoft | ( | ) | const [inline, virtual] |
Is the link soft or hard.
Definition at line 140 of file RegistryEntry.h.
References m_isSoft.
Referenced by add(), DataSvc::retrieveEntry(), and setObject().
00140 { 00141 return m_isSoft; 00142 }
| const Store& DataSvcHelpers::RegistryEntry::leaves | ( | ) | const [inline] |
Access the leaves of the object.
Definition at line 144 of file RegistryEntry.h.
References m_store.
Referenced by DataSvc::objectLeaves().
00144 { 00145 return m_store; 00146 }
| virtual int DataSvcHelpers::RegistryEntry::size | ( | ) | const [inline, virtual] |
Return the size of the container(=number of objects).
Definition at line 148 of file RegistryEntry.h.
References m_store, and std::vector< _Tp, _Alloc >::size().
| virtual bool DataSvcHelpers::RegistryEntry::isEmpty | ( | ) | const [inline, virtual] |
Simple check if the Container is empty.
Definition at line 152 of file RegistryEntry.h.
References m_store, and std::vector< _Tp, _Alloc >::size().
Referenced by DataSvc::unregisterObject().
| virtual Iterator DataSvcHelpers::RegistryEntry::begin | ( | ) | const [inline, virtual] |
Return starting point for container iteration.
Definition at line 156 of file RegistryEntry.h.
References std::vector< _Tp, _Alloc >::begin(), and m_store.
Referenced by DataSvc::preLoad().
| virtual Iterator DataSvcHelpers::RegistryEntry::end | ( | ) | const [inline, virtual] |
Return end elemtn if the container.
Definition at line 160 of file RegistryEntry.h.
References std::vector< _Tp, _Alloc >::end(), and m_store.
Referenced by DataSvc::preLoad().
| virtual IRegistry* DataSvcHelpers::RegistryEntry::find | ( | const IRegistry * | obj | ) | const [inline, virtual] |
Try to find an object identified by its pointer.
Definition at line 164 of file RegistryEntry.h.
References i_find().
Referenced by DataSvc::findObject().
00164 { 00165 return i_find(obj); 00166 }
| virtual IRegistry* DataSvcHelpers::RegistryEntry::find | ( | const std::string & | path | ) | const [inline, virtual] |
Try to find an object identified by its relative name to the directory.
Definition at line 168 of file RegistryEntry.h.
References i_find(), and Gaudi::Utils::Histos::path().
| void DataSvcHelpers::RegistryEntry::setAddress | ( | IOpaqueAddress * | pAddress | ) | [virtual] |
Set/Update Opaque address.
Implements IRegistry.
Definition at line 128 of file RegistryEntry.cpp.
References IOpaqueAddress::addRef(), m_pAddress, IOpaqueAddress::release(), and IOpaqueAddress::setRegistry().
Referenced by makeHard(), makeSoft(), and DataSvc::registerObject().
00128 { 00129 if ( 0 != pAddress ) { 00130 pAddress->addRef(); 00131 pAddress->setRegistry(this); 00132 } 00133 if ( 0 != m_pAddress ) m_pAddress->release(); 00134 m_pAddress = pAddress; 00135 }
| void DataSvcHelpers::RegistryEntry::setObject | ( | DataObject * | obj | ) |
Set/Update object address.
Definition at line 138 of file RegistryEntry.cpp.
References DataObject::addRef(), isSoft(), m_pObject, DataObject::release(), and DataObject::setRegistry().
Referenced by DataSvc::loadObject(), makeSoft(), and DataSvc::registerObject().
00138 { 00139 if ( 0 != pObject ) { 00140 pObject->addRef(); 00141 if ( !isSoft() ) pObject->setRegistry(this); 00142 } 00143 if ( 0 != m_pObject ) m_pObject->release(); 00144 m_pObject = pObject; 00145 }
| long DataSvcHelpers::RegistryEntry::add | ( | const std::string & | name, | |
| DataObject * | pObject, | |||
| bool | is_soft = false | |||
| ) | [virtual] |
Add entry to data store.
Definition at line 211 of file RegistryEntry.cpp.
References StatusCode::FAILURE, i_add(), makeHard(), makeSoft(), name(), and StatusCode::SUCCESS.
Referenced by add(), DataSvc::linkObject(), DataSvc::registerAddress(), and DataSvc::registerObject().
00211 { 00212 RegistryEntry* entry = i_add(name); 00213 if ( 0 != entry ) { 00214 ( is_soft ) ? entry->makeSoft(pObject) : entry->makeHard(pObject); 00215 add( entry ); 00216 return StatusCode::SUCCESS; 00217 } 00218 return StatusCode::FAILURE; 00219 }
| long DataSvcHelpers::RegistryEntry::add | ( | const std::string & | name, | |
| IOpaqueAddress * | pAddress, | |||
| bool | is_soft = false | |||
| ) | [virtual] |
Add entry to data store.
Definition at line 222 of file RegistryEntry.cpp.
References add(), StatusCode::FAILURE, i_add(), makeHard(), makeSoft(), name(), and StatusCode::SUCCESS.
00222 { 00223 RegistryEntry* entry = i_add(name); 00224 if ( 0 != entry ) { 00225 ( is_soft ) ? entry->makeSoft(pAddress) : entry->makeHard(pAddress); 00226 add( entry ); 00227 return StatusCode::SUCCESS; 00228 } 00229 return StatusCode::FAILURE; 00230 }
| long DataSvcHelpers::RegistryEntry::remove | ( | const std::string & | name | ) | [virtual] |
Remove an entry from the store.
Definition at line 162 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), std::basic_string< _CharT, _Traits, _Alloc >::begin(), std::vector< _Tp, _Alloc >::end(), StatusCode::FAILURE, std::basic_string< _CharT, _Traits, _Alloc >::insert(), m_store, Gaudi::Utils::Histos::path(), SEPARATOR, and StatusCode::SUCCESS.
Referenced by DataSvc::clearSubTree(), DataSvc::unlinkObject(), DataSvc::unregisterAddress(), and DataSvc::unregisterObject().
00162 { 00163 if ( nam[0] != SEPARATOR ) { 00164 std::string path = nam; 00165 path.insert(path.begin(), SEPARATOR); 00166 return remove(path); 00167 } 00168 // if this object is already present, this is an error.... 00169 for (Store::iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00170 if ( nam == (*i)->name() ) { 00171 remove(*i); 00172 return StatusCode::SUCCESS; 00173 } 00174 } 00175 return StatusCode::FAILURE; 00176 }
| long DataSvcHelpers::RegistryEntry::add | ( | IRegistry * | obj | ) | [virtual] |
Add object to the container.
Definition at line 195 of file RegistryEntry.cpp.
References address(), CAST_REGENTRY, isSoft(), m_pDataProviderSvc, m_store, std::vector< _Tp, _Alloc >::push_back(), setDataSvc(), setParent(), IOpaqueAddress::setRegistry(), and std::vector< _Tp, _Alloc >::size().
00195 { 00196 try { 00197 RegistryEntry* pEntry = CAST_REGENTRY(RegistryEntry*, obj); 00198 pEntry->setDataSvc(m_pDataProviderSvc); 00199 m_store.push_back(pEntry); 00200 pEntry->setParent(this); 00201 if ( !pEntry->isSoft() && pEntry->address() != 0 ) { 00202 pEntry->address()->setRegistry(pEntry); 00203 } 00204 } 00205 catch ( ... ) { 00206 } 00207 return m_store.size(); 00208 }
| long DataSvcHelpers::RegistryEntry::remove | ( | IRegistry * | obj | ) | [virtual] |
Remove an object from the container.
Definition at line 148 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), std::vector< _Tp, _Alloc >::end(), std::vector< _Tp, _Alloc >::erase(), m_store, release(), std::remove(), and std::vector< _Tp, _Alloc >::size().
00148 { 00149 try { 00150 RegistryEntry* pEntry = dynamic_cast<RegistryEntry*>(obj); 00151 Store::iterator i = std::remove(m_store.begin(), m_store.end(), pEntry); 00152 if (i != m_store.end()) { 00153 pEntry->release(); 00154 m_store.erase( i, m_store.end() ); 00155 } 00156 } 00157 catch ( ... ) { } 00158 return m_store.size(); 00159 }
| long DataSvcHelpers::RegistryEntry::deleteElements | ( | ) | [virtual] |
Delete all contained elements.
Definition at line 233 of file RegistryEntry.cpp.
References std::vector< _Tp, _Alloc >::begin(), CAST_REGENTRY, std::vector< _Tp, _Alloc >::end(), std::vector< _Tp, _Alloc >::erase(), and m_store.
Referenced by ~RegistryEntry().
00233 { 00234 for (Store::iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00235 RegistryEntry* entry = CAST_REGENTRY(RegistryEntry*, *i); 00236 if ( 0 != entry ) { 00237 entry->deleteElements(); 00238 entry->release(); 00239 } 00240 } 00241 m_store.erase(m_store.begin(), m_store.end()); 00242 return 0; 00243 }
| long DataSvcHelpers::RegistryEntry::traverseTree | ( | IDataStoreAgent * | pAgent, | |
| int | level = 0 | |||
| ) | [virtual] |
traverse data tree
Definition at line 322 of file RegistryEntry.cpp.
References IDataStoreAgent::analyse(), std::vector< _Tp, _Alloc >::begin(), CAST_REGENTRY, std::vector< _Tp, _Alloc >::end(), StatusCode::FAILURE, m_store, and StatusCode::SUCCESS.
Referenced by DataSvc::traverseSubTree(), and DataSvc::traverseTree().
00322 { 00323 bool go_down = pAgent->analyse(this, level); 00324 long status = StatusCode::SUCCESS; 00325 if ( go_down ) { 00326 for ( Store::iterator i = m_store.begin(); i != m_store.end(); i++ ) { 00327 try { 00328 RegistryEntry* entry = CAST_REGENTRY(RegistryEntry*, *i); 00329 entry->traverseTree(pAgent, level+1); 00330 } 00331 catch (...) { 00332 status = StatusCode::FAILURE; 00333 } 00334 } 00335 } 00336 return status; 00337 }
Definition at line 39 of file RegistryEntry.h.
unsigned long DataSvcHelpers::RegistryEntry::m_refCount [private] |
bool DataSvcHelpers::RegistryEntry::m_isSoft [private] |
Is the link soft or hard?
Definition at line 46 of file RegistryEntry.h.
Referenced by isSoft(), makeHard(), makeSoft(), and ~RegistryEntry().
String containing full path of the object (volatile).
Definition at line 48 of file RegistryEntry.h.
Referenced by identifier(), RegistryEntry(), and setParent().
Path name.
Definition at line 50 of file RegistryEntry.h.
Referenced by assemblePath(), i_find(), name(), and RegistryEntry().
Pointer to parent.
Definition at line 52 of file RegistryEntry.h.
Referenced by assemblePath(), parent(), parentEntry(), and setParent().
Pointer to opaque address (load info).
Definition at line 54 of file RegistryEntry.h.
Referenced by address(), makeHard(), setAddress(), and ~RegistryEntry().
Pointer to object.
Definition at line 56 of file RegistryEntry.h.
Referenced by i_find(), makeHard(), object(), setObject(), and ~RegistryEntry().
Pointer to hosting transient store.
Definition at line 58 of file RegistryEntry.h.
Referenced by add(), dataSvc(), and setDataSvc().
Store DataSvcHelpers::RegistryEntry::m_store [private] |
Store of leaves.
Definition at line 60 of file RegistryEntry.h.
Referenced by add(), begin(), deleteElements(), end(), i_add(), i_find(), isEmpty(), leaves(), remove(), size(), and traverseTree().