| The Gaudi Framework v29r0 (ff2e7097)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Types | Public Member Functions | Public Attributes | List of all members
SmartRefBase Class Reference

User example objects: SmartRefBase. More...

`#include <GaudiKernel/SmartRefBase.h>`

Collaboration diagram for SmartRefBase:
[legend]

## Public Types
enum | { DATAOBJECT, CONTAINEDOBJECT }

## Public Member Functions
const ContainedObject * | accessData (const ContainedObject *typ) const
| Load on demand of ContainedObject like references. More...
const DataObject * | accessData (const DataObject *typ) const
| Load on demand of DataObject like references. More...
bool | isEqualEx (const DataObject *pObj, const SmartRefBase &c) const
| Extended equality check. More...
bool | isEqualEx (const ContainedObject *pObj, const SmartRefBase &c) const
| Extended equality check. More...
bool | isEqual (const ContainedObject *, const SmartRefBase &c) const
| Equality operator for ContainedObject like references. More...
bool | isEqual (const DataObject *, const SmartRefBase &c) const
| Equality operator for DataObject like references. More...
void | writeObject (const DataObject *pObject, StreamBuffer &s) const
| Output streamer for DataObject like references. More...
void | writeObject (const ContainedObject *pObject, StreamBuffer &s) const
| Output streamer for ContainedObject like references. More...
DataObject * | readObject (const DataObject *, StreamBuffer &s) const
| Input streamer for DataObject like references. More...
ContainedObject * | readObject (const ContainedObject *, StreamBuffer &s) const
| Output streamer for ContainedObject like references. More...
void | setObjectType (const ContainedObject *) const
void | setObjectType (const DataObject *) const
const std::string & | path () const
| Shortcut to access the path to the linked object. More...
int | objectType () const
void | set (DataObject *pObj, long hint_id, long link_id)
| Setup smart reference when reading. Must be allowed from external sources. More...

## Public Attributes
long | m_hintID
| Object data: ID of the link hint to the identifiable object. More...
long | m_linkID
| Object data: ID of the object within the identifiable container (if any) More...
const DataObject * | m_data
| Object data: Pointer to the identifiable object the link originates. More...
const ContainedObject * | m_contd
| Object data: Pointer to the Contained object (if applicable) More...
long | m_type

## Detailed Description

User example objects: SmartRefBase.

Description: Base class of SmartReference objects. The base class handles the object requests to the data store. The separation of the SmartReference and the base class is mainly to avoid code blow up, because if the object is not yet present serious work must be performed in order to request the object from the store and invoke object updates to keep pointers in sync.

Base Class: None

Dependencies: None

History :

    +---------+----------------------------------------------+--------+
    |    Date |                 Comment                      | Who    |
    +---------+----------------------------------------------+--------+
    | 21/06/99| Initial version.                             | MF     |
    +---------+----------------------------------------------+--------+

Author: M.Frank Version: 1.0

Definition at line 47 of file SmartRefBase.h.

## Member Enumeration Documentation

anonymous enum

Enumerator
DATAOBJECT |
CONTAINEDOBJECT |

Definition at line 61 of file SmartRefBase.h.

61 { DATAOBJECT, CONTAINEDOBJECT };
SmartRefBase::CONTAINEDOBJECT
Definition: SmartRefBase.h:61
SmartRefBase::DATAOBJECT
Definition: SmartRefBase.h:61

## Member Function Documentation

const ContainedObject * SmartRefBase::accessData | ( | const ContainedObject * | typ | ) | const

Load on demand of ContainedObject like references.

Load on demand: ContainedObject type references.

Definition at line 34 of file SmartRefBase.cpp.

35 {
36 if ( m_hintID != StreamBuffer::INVALID && m_linkID != StreamBuffer::INVALID ) {
37 const _Container* cnt = dynamic_cast<const _Container*>( accessData( m_data ) );
38 if ( cnt ) return cnt->containedObject( m_linkID );
39 }
40 return nullptr;
41 }
SmartRefBase::accessData
const ContainedObject * accessData(const ContainedObject *typ) const
Load on demand of ContainedObject like references.
Definition: SmartRefBase.cpp:34
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
ObjectContainerBase::containedObject
virtual ContainedObject * containedObject(long dist) const =0
Pointer to an object of a given distance.
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53
ObjectContainerBase
ObjectContainerBase is the base class for Gaudi container classes.
Definition: ObjectContainerBase.h:19
StreamBuffer::INVALID
Definition: StreamBuffer.h:119

const DataObject * SmartRefBase::accessData | ( | const DataObject * | typ | ) | const

Load on demand of DataObject like references.

Load on demand: DataObject type references.

Definition at line 44 of file SmartRefBase.cpp.

45 {
46 DataObject* target = nullptr;
47 DataObject* source = nullptr;
48 if ( !m_data && m_contd ) m_data = m_contd->parent();
49 source = const_cast<DataObject*>( m_data );
50 if ( m_hintID != StreamBuffer::INVALID && source ) {
51 LinkManager* mgr = source->linkMgr();
52 if ( mgr ) {
53 LinkManager::Link* link = mgr->link( m_hintID );
54 if ( link ) {
55 target = link->object();
56 if ( !target ) {
57 IRegistry* reg = source->registry();
58 if ( reg ) {
59 IDataProviderSvc* datasvc = reg->dataSvc();
60 if ( datasvc && datasvc->retrieveObject( link->path(), target ).isSuccess() ) {
61 link->setObject( target );
62 }
63 }
64 }
65 }
66 }
67 }
68 return target;
69 }
LinkManager::Link::path
const std::string & path() const
Access to path of object.
Definition: LinkManager.h:66
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
IDataProviderSvc
Data provider interface definition.
Definition: IDataProviderSvc.h:45
ContainedObject::parent
const ObjectContainerBase * parent() const
Access to parent object.
Definition: ContainedObject.h:52
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
DataObject::linkMgr
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:74
SmartRefBase::m_contd
const ContainedObject * m_contd
Object data: Pointer to the Contained object (if applicable)
Definition: SmartRefBase.h:57
LinkManager::Link::setObject
void setObject(const DataObject *pObject)
Update object pointer.
Definition: LinkManager.h:61
LinkManager::link
Link * link(long id)
Retrieve symbolic link identified by ID.
Definition: LinkManager.cpp:31
IRegistry::dataSvc
virtual IDataProviderSvc * dataSvc() const =0
Retrieve pointer to Transient Store.
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StreamBuffer::INVALID
Definition: StreamBuffer.h:119
LinkManager::Link::object
const DataObject * object() const
Const access to data object.
Definition: LinkManager.h:63
LinkManager::Link
Embedded class defining a symbolic link Note: No copy constructor; bitwise copy (done by the compiler...
Definition: LinkManager.h:32
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
LinkManager
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Definition: LinkManager.h:21
IDataProviderSvc::retrieveObject
virtual StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.

bool SmartRefBase::isEqual | ( | const ContainedObject * | ,
|  | const SmartRefBase & | c
| ) |  | const
| inline

Equality operator for ContainedObject like references.

Definition at line 73 of file SmartRefBase.h.

74 {
75 return ( m_hintID == c.m_hintID && m_linkID == c.m_linkID && m_data == c.m_data && m_contd == c.m_contd );
76 }
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
SmartRefBase::m_contd
const ContainedObject * m_contd
Object data: Pointer to the Contained object (if applicable)
Definition: SmartRefBase.h:57
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53

bool SmartRefBase::isEqual | ( | const DataObject * | ,
|  | const SmartRefBase & | c
| ) |  | const
| inline

Equality operator for DataObject like references.

Definition at line 78 of file SmartRefBase.h.

79 {
80 return m_linkID == c.m_linkID && m_data == c.m_data;
81 }
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53

bool SmartRefBase::isEqualEx | ( | const DataObject * | pObj,
|  | const SmartRefBase & | c
| ) |  | const

Extended equality check.

Definition at line 72 of file SmartRefBase.cpp.

73 {
74 if ( c.m_hintID != StreamBuffer::INVALID && pObj ) {
75 DataObject* source = const_cast<DataObject*>( c.m_data );
76 if ( source ) {
77 LinkManager* mgr = source->linkMgr();
78 if ( mgr ) {
79 LinkManager::Link* link = mgr->link( c.m_hintID );
80 if ( link ) {
81 IRegistry* pReg = pObj->registry();
82 return pReg && link->path() == pReg->identifier();
83 }
84 }
85 }
86 }
87 return false;
88 }
LinkManager::Link::path
const std::string & path() const
Access to path of object.
Definition: LinkManager.h:66
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
DataObject::linkMgr
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:74
IRegistry::identifier
virtual const id_type & identifier() const =0
Full identifier (or key)
LinkManager::link
Link * link(long id)
Retrieve symbolic link identified by ID.
Definition: LinkManager.cpp:31
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StreamBuffer::INVALID
Definition: StreamBuffer.h:119
LinkManager::Link
Embedded class defining a symbolic link Note: No copy constructor; bitwise copy (done by the compiler...
Definition: LinkManager.h:32
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
LinkManager
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Definition: LinkManager.h:21

bool SmartRefBase::isEqualEx | ( | const ContainedObject * | pObj,
|  | const SmartRefBase & | c
| ) |  | const

Extended equality check.

Definition at line 91 of file SmartRefBase.cpp.

92 {
93 return isEqualEx( pObj->parent(), c ) && pObj->index() == c.m_linkID;
94 }
gaudirun.c
c
Definition: gaudirun.py:407
SmartRefBase::isEqualEx
bool isEqualEx(const DataObject *pObj, const SmartRefBase &c) const
Extended equality check.
Definition: SmartRefBase.cpp:72
ContainedObject::index
virtual long index() const
Distance in the parent container.
Definition: ContainedObject.h:57
ContainedObject::parent
const ObjectContainerBase * parent() const
Access to parent object.
Definition: ContainedObject.h:52
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53

int SmartRefBase::objectType | ( |  | ) | const
| inline

Definition at line 110 of file SmartRefBase.h.

110 { return m_type; }
SmartRefBase::m_type
long m_type
Definition: SmartRefBase.h:59

const std::string & SmartRefBase::path | ( |  | ) | const

Shortcut to access the path to the linked object.

Definition at line 96 of file SmartRefBase.cpp.

97 {
98 static std::string s_empty_string{};
99 DataObject* source = nullptr;
100 if ( !m_data && m_contd ) m_data = m_contd->parent();
101 source = const_cast<DataObject*>( m_data );
102 if ( m_hintID != StreamBuffer::INVALID && source ) {
103 LinkManager* mgr = source->linkMgr();
104 if ( mgr ) {
105 LinkManager::Link* link = mgr->link( m_hintID );
106 if ( link ) return link->path();
107 }
108 }
109 return s_empty_string;
110 }
LinkManager::Link::path
const std::string & path() const
Access to path of object.
Definition: LinkManager.h:66
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
ContainedObject::parent
const ObjectContainerBase * parent() const
Access to parent object.
Definition: ContainedObject.h:52
DataObject::linkMgr
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:74
std::string
STL class.
SmartRefBase::m_contd
const ContainedObject * m_contd
Object data: Pointer to the Contained object (if applicable)
Definition: SmartRefBase.h:57
LinkManager::link
Link * link(long id)
Retrieve symbolic link identified by ID.
Definition: LinkManager.cpp:31
StreamBuffer::INVALID
Definition: StreamBuffer.h:119
LinkManager::Link
Embedded class defining a symbolic link Note: No copy constructor; bitwise copy (done by the compiler...
Definition: LinkManager.h:32
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
LinkManager
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Definition: LinkManager.h:21

DataObject* SmartRefBase::readObject | ( | const DataObject * | ,
|  | StreamBuffer & | s
| ) |  | const
| inline

Input streamer for DataObject like references.

Definition at line 90 of file SmartRefBase.h.

91 {
92 DataObject* pObj = 0;
93 s.getIdentifiedLink( pObj, m_hintID );
94 return pObj;
95 }
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
StreamBuffer::getIdentifiedLink
void getIdentifiedLink(DataObject *&pObject, long &hint)
Definition: StreamBuffer.h:292

ContainedObject* SmartRefBase::readObject | ( | const ContainedObject * | ,
|  | StreamBuffer & | s
| ) |  | const
| inline

Output streamer for ContainedObject like references.

Definition at line 97 of file SmartRefBase.h.

98 {
99 ContainedObject* pObj = 0;
100 s.getContainedLink( pObj, m_hintID, m_linkID );
101 return pObj;
102 }
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53
ContainedObject
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
Definition: ContainedObject.h:31
StreamBuffer::getContainedLink
void getContainedLink(ContainedObject *&pObject, long &hint, long &link)
Definition: StreamBuffer.h:304

void SmartRefBase::set | ( | DataObject * | pObj,
|  | long | hint_id,
|  | long | link_id
| ) |  |

Setup smart reference when reading. Must be allowed from external sources.

Setup smart reference.

Definition at line 26 of file SmartRefBase.cpp.

27 {
28 m_data = pObj;
29 m_hintID = hint_id;
30 m_linkID = link_id;
31 }
SmartRefBase::m_data
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53

void SmartRefBase::setObjectType | ( | const ContainedObject * |  | ) | const
| inline

Definition at line 103 of file SmartRefBase.h.

103 { m_type = CONTAINEDOBJECT; }
SmartRefBase::CONTAINEDOBJECT
Definition: SmartRefBase.h:61
SmartRefBase::m_type
long m_type
Definition: SmartRefBase.h:59

void SmartRefBase::setObjectType | ( | const DataObject * |  | ) | const
| inline

Definition at line 104 of file SmartRefBase.h.

104 { m_type = DATAOBJECT; }
SmartRefBase::DATAOBJECT
Definition: SmartRefBase.h:61
SmartRefBase::m_type
long m_type
Definition: SmartRefBase.h:59

void SmartRefBase::writeObject | ( | const DataObject * | pObject,
|  | StreamBuffer & | s
| ) |  | const
| inline

Output streamer for DataObject like references.

Definition at line 83 of file SmartRefBase.h.

83 { s.addIdentifiedLink( pObject, m_hintID ); }
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
StreamBuffer::addIdentifiedLink
void addIdentifiedLink(const DataObject *pObject, long hint)
Definition: StreamBuffer.h:299

void SmartRefBase::writeObject | ( | const ContainedObject * | pObject,
|  | StreamBuffer & | s
| ) |  | const
| inline

Output streamer for ContainedObject like references.

Definition at line 85 of file SmartRefBase.h.

86 {
87 s.addContainedLink( pObject, m_hintID, m_linkID );
88 }
SmartRefBase::m_hintID
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
SmartRefBase::m_linkID
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53
StreamBuffer::addContainedLink
void addContainedLink(const ContainedObject *pObject, long hint, long link)
Definition: StreamBuffer.h:312

## Member Data Documentation

const ContainedObject* SmartRefBase::m_contd
| mutable

Object data: Pointer to the Contained object (if applicable)

Definition at line 57 of file SmartRefBase.h.

const DataObject* SmartRefBase::m_data
| mutable

Object data: Pointer to the identifiable object the link originates.

Definition at line 55 of file SmartRefBase.h.

long SmartRefBase::m_hintID
| mutable

Object data: ID of the link hint to the identifiable object.

Definition at line 51 of file SmartRefBase.h.

long SmartRefBase::m_linkID
| mutable

Object data: ID of the object within the identifiable container (if any)

Definition at line 53 of file SmartRefBase.h.

long SmartRefBase::m_type
| mutable

Definition at line 59 of file SmartRefBase.h.

The documentation for this class was generated from the following files:

- GaudiKernel/GaudiKernel/SmartRefBase.h
- GaudiKernel/src/Lib/SmartRefBase.cpp