00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef KERNEL_SMARTREFBASE_H
00012 #define KERNEL_SMARTREFBASE_H 1
00013
00014
00015 #include "GaudiKernel/StreamBuffer.h"
00016
00017 class ObjectContainerBase;
00018 class SmartRefBase;
00019 class ContainedObject;
00020 class DataObject;
00021
00047 class SmartRefBase {
00048 protected:
00050 mutable long m_hintID;
00052 mutable long m_linkID;
00054 mutable const DataObject* m_data;
00056 mutable const ContainedObject* m_contd;
00057
00059 const ContainedObject* accessData ( const ContainedObject* typ ) const;
00061 const DataObject* accessData ( const DataObject* typ ) const;
00063 bool isEqual (const ContainedObject* , const SmartRefBase& c) const {
00064 return (m_hintID == c.m_hintID && m_linkID == c.m_linkID &&
00065 m_data == c.m_data && m_contd == c.m_contd);
00066 }
00068 bool isEqual (const DataObject* , const SmartRefBase& c) const {
00069 return m_linkID == c.m_linkID;
00070 }
00072 void writeObject (const DataObject* pObject, StreamBuffer& s) const {
00073 s.addIdentifiedLink(pObject, m_hintID);
00074 }
00076 void writeObject (const ContainedObject* pObject, StreamBuffer& s) const {
00077 s.addContainedLink(pObject, m_hintID, m_linkID);
00078 }
00080 DataObject* readObject (const DataObject* , StreamBuffer& s) const {
00081 DataObject* pObj = 0;
00082 s.getIdentifiedLink(pObj, m_hintID);
00083 return pObj;
00084 }
00086 ContainedObject* readObject(const ContainedObject* , StreamBuffer& s) const {
00087 ContainedObject* pObj = 0;
00088 s.getContainedLink(pObj, m_hintID, m_linkID);
00089 return pObj;
00090 }
00091 };
00092 #endif // KERNEL_SMARTREFBASE_H