26#include <TClassStreamer.h>
27#include <TInterpreter.h>
37 static const DataObject* last_link_object =
nullptr;
38 static int last_link_hint = -1;
40 last_link_object =
nullptr;
78 }
catch (
const exception& e ) {
79 string err =
"Class:" + string(
m_root->GetName() ) +
"> Exception in object I/O";
81 throw runtime_error( err );
83 string err =
"Class:" + string(
m_root->GetName() ) +
"> Exception in object I/O";
84 throw runtime_error( err );
88 virtual void get( TBuffer& b,
void* obj );
90 virtual void put( TBuffer& b,
void* obj );
98 Version_t version = b.ReadVersion( &start, &count,
m_root );
99 m_root->ReadBuffer( b, obj, version, start, count );
108 cout <<
"Hit uninitialized smartRef!!!!" << endl;
137 cout <<
"IOHandler<SmartRefBase>::onWrite> "
138 <<
"Found invalid smart reference with object "
139 <<
"having no parent." << endl;
140 throw runtime_error(
"IOHandler<SmartRefBase>::onWrite> "
141 "Found invalid smart reference with object "
142 "having no parent." );
150 if ( pDO == last_link_object ) {
151 r.
Base->
set( curr, last_link_hint, link );
152 m_root->WriteBuffer( b, obj );
159 last_link_hint = hint;
160 last_link_object = pDO;
166 r.
Base->
set( curr, hint, link );
167 m_root->WriteBuffer( b, obj );
173 Version_t version = b.ReadVersion( &start, &count,
m_root );
174 m_root->ReadBuffer( b, obj, version, start, count );
181 m_root->WriteBuffer( b, obj );
185 static bool makeStreamer(
MsgStream& log ) {
187 TClass* c = gROOT->GetClass( cl_name.c_str() );
193 log <<
MSG::ERROR <<
"[No ROOT TClass] Failed to install IOHandler for class " << cl_name <<
endmsg;
198 static bool first =
true;
201 gInterpreter->LoadLibraryMap();
202 gInterpreter->AutoLoad(
"DataObject" );
204 bool b1 = makeStreamer<SmartRefBase>( s );
205 bool b2 = makeStreamer<ContainedObject>( s );
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
void setParent(ObjectContainerBase *value)
Update parent member.
const ObjectContainerBase * parent() const
Access to parent object.
virtual long index() const
Distance in the parent container.
A DataObject is the base class of any identifiable object on any data store.
IRegistry * registry() const
Get pointer to Registry.
LinkManager * linkMgr()
Retrieve Link manager.
TClass * m_root
ROOT persistent class description.
TClassStreamer * Generate() const override
virtual void get(TBuffer &b, void *obj)
Callback for reading the object.
IOHandler(TClass *c)
Initializing constructor.
void operator()(TBuffer &b, void *obj) override
ROOT I/O callback.
virtual void put(TBuffer &b, void *obj)
Callback for writing the object.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
virtual const id_type & identifier() const =0
Full identifier (or key)
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
long addLink(const std::string &path, const DataObject *pObject)
Add link by object reference and path.
Definition of the MsgStream class used to transmit messages.
ObjectContainerBase is the base class for Gaudi container classes.
User example objects: SmartRefBase.
void set(DataObject *pObj, long hint_id, long link_id)
Setup smart reference when reading. Must be allowed from external sources.
Kernel objects: SmartRef.
GAUDI_API void pushCurrentDataObject(DataObject **pobjAddr)
GAUDI_API void popCurrentDataObject()
GAUDI_API DataObject * getCurrentDataObject()
void popCurrentDataObject()
bool patchStreamers(MsgStream &log)
void pushCurrentDataObject(DataObject **pobjAddr)
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
SmartRef< DataObject > * ObjectRef
SmartRef< ContainedObject > * ContainedRef