The Gaudi Framework  v29r0 (ff2e7097)
SmartRefBase.h
Go to the documentation of this file.
1 // ====================================================================
2 // SmartRefBase.h
3 // --------------------------------------------------------------------
4 //
5 // Package : Gaudi/Kernel
6 // Base class for SmartReference objects
7 //
8 // Author : Markus Frank
9 //
10 // ====================================================================
11 #ifndef KERNEL_SMARTREFBASE_H
12 #define KERNEL_SMARTREFBASE_H 1
13 
14 // Framework include files
16 
18 class SmartRefBase;
19 class ContainedObject;
20 class DataObject;
21 
48 {
49 public:
51  mutable long m_hintID;
53  mutable long m_linkID;
55  mutable const DataObject* m_data;
57  mutable const ContainedObject* m_contd;
58 
59  mutable long m_type;
60 
61  enum { DATAOBJECT, CONTAINEDOBJECT };
62 
64  const ContainedObject* accessData( const ContainedObject* typ ) const;
66  const DataObject* accessData( const DataObject* typ ) const;
67 
69  bool isEqualEx( const DataObject* pObj, const SmartRefBase& c ) const;
71  bool isEqualEx( const ContainedObject* pObj, const SmartRefBase& c ) const;
73  bool isEqual( const ContainedObject* /* pObj */, const SmartRefBase& c ) const
74  {
75  return ( m_hintID == c.m_hintID && m_linkID == c.m_linkID && m_data == c.m_data && m_contd == c.m_contd );
76  }
78  bool isEqual( const DataObject* /* pObj */, const SmartRefBase& c ) const
79  {
80  return m_linkID == c.m_linkID && m_data == c.m_data;
81  }
83  void writeObject( const DataObject* pObject, StreamBuffer& s ) const { s.addIdentifiedLink( pObject, m_hintID ); }
85  void writeObject( const ContainedObject* pObject, StreamBuffer& s ) const
86  {
87  s.addContainedLink( pObject, m_hintID, m_linkID );
88  }
90  DataObject* readObject( const DataObject* /* pObject */, StreamBuffer& s ) const
91  {
92  DataObject* pObj = 0;
93  s.getIdentifiedLink( pObj, m_hintID );
94  return pObj;
95  }
97  ContainedObject* readObject( const ContainedObject* /* pObject */, StreamBuffer& s ) const
98  {
99  ContainedObject* pObj = 0;
100  s.getContainedLink( pObj, m_hintID, m_linkID );
101  return pObj;
102  }
103  void setObjectType( const ContainedObject* /* pobj */ ) const { m_type = CONTAINEDOBJECT; }
104  void setObjectType( const DataObject* /* pobj */ ) const { m_type = DATAOBJECT; }
105 
107  const std::string& path() const;
108 
109 public:
110  int objectType() const { return m_type; }
112  void set( DataObject* pObj, long hint_id, long link_id );
113 };
114 #endif // KERNEL_SMARTREFBASE_H
bool isEqual(const ContainedObject *, const SmartRefBase &c) const
Equality operator for ContainedObject like references.
Definition: SmartRefBase.h:73
const DataObject * m_data
Object data: Pointer to the identifiable object the link originates.
Definition: SmartRefBase.h:55
The stream buffer is a small object collecting object data.
Definition: StreamBuffer.h:41
long m_hintID
Object data: ID of the link hint to the identifiable object.
Definition: SmartRefBase.h:51
ContainedObject * readObject(const ContainedObject *, StreamBuffer &s) const
Output streamer for ContainedObject like references.
Definition: SmartRefBase.h:97
void writeObject(const DataObject *pObject, StreamBuffer &s) const
Output streamer for DataObject like references.
Definition: SmartRefBase.h:83
void writeObject(const ContainedObject *pObject, StreamBuffer &s) const
Output streamer for ContainedObject like references.
Definition: SmartRefBase.h:85
void setObjectType(const ContainedObject *) const
Definition: SmartRefBase.h:103
User example objects: SmartRefBase.
Definition: SmartRefBase.h:47
STL class.
const ContainedObject * m_contd
Object data: Pointer to the Contained object (if applicable)
Definition: SmartRefBase.h:57
bool isEqual(const DataObject *, const SmartRefBase &c) const
Equality operator for DataObject like references.
Definition: SmartRefBase.h:78
void setObjectType(const DataObject *) const
Definition: SmartRefBase.h:104
void addIdentifiedLink(const DataObject *pObject, long hint)
Definition: StreamBuffer.h:299
long m_linkID
Object data: ID of the object within the identifiable container (if any)
Definition: SmartRefBase.h:53
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
string s
Definition: gaudirun.py:253
DataObject * readObject(const DataObject *, StreamBuffer &s) const
Input streamer for DataObject like references.
Definition: SmartRefBase.h:90
ObjectContainerBase is the base class for Gaudi container classes.
#define GAUDI_API
Definition: Kernel.h:110
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
void addContainedLink(const ContainedObject *pObject, long hint, long link)
Definition: StreamBuffer.h:312
int objectType() const
Definition: SmartRefBase.h:110
void getContainedLink(ContainedObject *&pObject, long &hint, long &link)
Definition: StreamBuffer.h:304
void getIdentifiedLink(DataObject *&pObject, long &hint)
Definition: StreamBuffer.h:292