KeyedObject.cpp
Go to the documentation of this file.
1 // Include files
2 #include "GaudiKernel/Kernel.h"
9 
15 namespace Objects {
16  bool access(const ContainedObject* from, ContainedObject** to);
17  bool access(const DataObject* from, DataObject** to);
18 
19  template <class TO, class FROM>
20  TO* reference(FROM* from) {
21  ContainedObject* to = nullptr;
22  return access(from, &to) ? dynamic_cast<TO*>(to) : nullptr;
23  }
24 }
25 
26 bool Objects::access(const DataObject* from, DataObject** to)
27 {
28  DataObject* src = const_cast<DataObject*>(from);
29  DataObject* tar = nullptr;
30  if ( src ) {
31  LinkManager* mgr = src->linkMgr();
32  if ( mgr ) {
33  LinkManager::Link* link = mgr->link(long(0));
34  if ( link ) {
35  tar = link->object();
36  if ( !tar ) {
37  IRegistry* reg = src->registry();
38  if ( reg ) {
39  IDataProviderSvc* ds = reg->dataSvc();
40  if ( ds && ds->retrieveObject(link->path(), tar).isSuccess() ) {
41  link->setObject(tar);
42  }
43  }
44  }
45  }
46  }
47  }
48  *to = tar;
49  return tar != nullptr;
50 }
51 
52 // Load on demand: ContainedObject type references
54 {
55  *to = nullptr;
56  if ( from ) {
57  DataObject *tar = nullptr;
58  if ( access(from->parent(), &tar) ) {
59  ObjectContainerBase* cnt = dynamic_cast<ObjectContainerBase*>(tar);
60  if ( cnt ) {
61  *to = cnt->containedObject(from->index());
62  }
63  }
64  }
65  return *to != nullptr;
66 }
67 
Namespace for basic object handling within container classes.
Definition: KeyedObject.cpp:15
virtual long index() const
Distance in the parent container.
Data provider interface definition.
const ObjectContainerBase * parent() const
Access to parent object.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:78
virtual ContainedObject * containedObject(long dist) const =0
Pointer to an object of a given distance.
virtual IDataProviderSvc * dataSvc() const =0
Retrieve pointer to Transient Store.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
bool access(const ContainedObject *from, ContainedObject **to)
Definition: KeyedObject.cpp:53
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
ObjectContainerBase is the base class for Gaudi container classes.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
TO * reference(FROM *from)
Definition: KeyedObject.cpp:20
virtual StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.