The Gaudi Framework  master (1304469f)
Loading...
Searching...
No Matches
GaudiRoot::IOHandler< T > Class Template Reference
Inheritance diagram for GaudiRoot::IOHandler< T >:
Collaboration diagram for GaudiRoot::IOHandler< T >:

Public Member Functions

 IOHandler (TClass *c)
 Initializing constructor.
 
void operator() (TBuffer &b, void *obj) override
 ROOT I/O callback.
 
virtual void get (TBuffer &b, void *obj)
 Callback for reading the object.
 
virtual void put (TBuffer &b, void *obj)
 Callback for writing the object.
 
TClassStreamer * Generate () const override
 
void get (TBuffer &b, void *obj)
 
void put (TBuffer &b, void *obj)
 
void get (TBuffer &b, void *obj)
 
void put (TBuffer &b, void *obj)
 
void get (TBuffer &b, void *obj)
 
void put (TBuffer &, void *)
 

Protected Attributes

TClass * m_root
 ROOT persistent class description.
 

Detailed Description

template<class T>
class GaudiRoot::IOHandler< T >

Definition at line 64 of file RootIOHandler.cpp.

Constructor & Destructor Documentation

◆ IOHandler()

template<class T>
GaudiRoot::IOHandler< T >::IOHandler ( TClass * c)
inline

Initializing constructor.

Definition at line 71 of file RootIOHandler.cpp.

71: m_root( c ) {}
TClass * m_root
ROOT persistent class description.

Member Function Documentation

◆ Generate()

template<class T>
TClassStreamer * GaudiRoot::IOHandler< T >::Generate ( ) const
inlineoverride

Definition at line 92 of file RootIOHandler.cpp.

92{ return new IOHandler( *this ); }
IOHandler(TClass *c)
Initializing constructor.

◆ get() [1/4]

template<class T>
virtual void GaudiRoot::IOHandler< T >::get ( TBuffer & b,
void * obj )
virtual

Callback for reading the object.

◆ get() [2/4]

void GaudiRoot::IOHandler< SmartRefBase >::get ( TBuffer & b,
void * obj )

Definition at line 96 of file RootIOHandler.cpp.

96 {
97 RefAccessor r( obj );
99 Version_t version = b.ReadVersion( &start, &count, m_root );
100 m_root->ReadBuffer( b, obj, version, start, count );
101 switch ( r.Base->objectType() ) {
103 ( *r.ObjectRef )( Gaudi::getCurrentDataObject() );
104 break;
106 ( *r.ContainedRef )( Gaudi::getCurrentDataObject() );
107 break;
108 default:
109 cout << "Hit uninitialized smartRef!!!!" << endl;
110 break;
111 }
112 }

◆ get() [3/4]

void GaudiRoot::IOHandler< ContainedObject >::get ( TBuffer & b,
void * obj )

Definition at line 172 of file RootIOHandler.cpp.

172 {
174 Version_t version = b.ReadVersion( &start, &count, m_root );
175 m_root->ReadBuffer( b, obj, version, start, count );
176 ContainedObject* p = static_cast<ContainedObject*>( obj );
177 p->setParent( static_cast<ObjectContainerBase*>( Gaudi::getCurrentDataObject() ) );
178 }

◆ get() [4/4]

void GaudiRoot::IOHandler< pool::Token >::get ( TBuffer & b,
void * obj )

Definition at line 186 of file RootIOHandler.cpp.

186 {
189 b.ReadVersion( &start, &count, m_root );
190 b.ReadFastArray( &t->m_oid.first, 2 );
191 b.CheckByteCount( start, count, m_root );
192 }

◆ operator()()

template<class T>
void GaudiRoot::IOHandler< T >::operator() ( TBuffer & b,
void * obj )
inlineoverride

ROOT I/O callback.

Definition at line 73 of file RootIOHandler.cpp.

73 {
74 try {
75 if ( b.IsReading() )
76 get( b, obj );
77 else
78 put( b, obj );
79 } catch ( const exception& e ) {
80 string err = "Class:" + string( m_root->GetName() ) + "> Exception in object I/O";
81 err += e.what();
82 throw runtime_error( err );
83 } catch ( ... ) {
84 string err = "Class:" + string( m_root->GetName() ) + "> Exception in object I/O";
85 throw runtime_error( err );
86 }
87 }
virtual void get(TBuffer &b, void *obj)
Callback for reading the object.
virtual void put(TBuffer &b, void *obj)
Callback for writing the object.

◆ put() [1/4]

void GaudiRoot::IOHandler< pool::Token >::put ( TBuffer & ,
void *  )

Definition at line 195 of file RootIOHandler.cpp.

195 {
196 throw runtime_error( "Writing POOL files is not implemented!" );
197 }

◆ put() [2/4]

template<class T>
virtual void GaudiRoot::IOHandler< T >::put ( TBuffer & b,
void * obj )
virtual

Callback for writing the object.

◆ put() [3/4]

void GaudiRoot::IOHandler< SmartRefBase >::put ( TBuffer & b,
void * obj )

Definition at line 115 of file RootIOHandler.cpp.

115 {
116 RefAccessor r( obj );
118 DataObject * curr, *pDO;
119 int hint, link;
120
122 pDO = r.ObjectRef->data();
123 hint = r.ObjectRef->hintID();
124 link = r.ObjectRef->linkID();
125 if ( pDO ) {
126 switch ( r.Base->objectType() ) {
128 p = r.ContainedRef->data();
129 if ( p ) {
130 const ObjectContainerBase* parent = p->parent();
131 if ( parent ) {
132 link = p->index();
133 pDO = const_cast<ObjectContainerBase*>( parent );
134 break;
135 }
136 }
137 pDO = nullptr;
138 cout << "IOHandler<SmartRefBase>::onWrite> "
139 << "Found invalid smart reference with object "
140 << "having no parent." << endl;
141 throw runtime_error( "IOHandler<SmartRefBase>::onWrite> "
142 "Found invalid smart reference with object "
143 "having no parent." );
144 break;
147 break;
148 default:
149 break;
150 }
151 if ( pDO == last_link_object ) {
152 r.Base->set( curr, last_link_hint, link );
153 m_root->WriteBuffer( b, obj );
154 return;
155 } else if ( pDO ) {
156 LinkManager* mgr = curr->linkMgr();
157 IRegistry* reg = pDO->registry();
158 if ( reg && mgr ) {
159 hint = mgr->addLink( reg->identifier(), pDO );
162 }
163 } else {
165 }
166 }
167 r.Base->set( curr, hint, link );
168 m_root->WriteBuffer( b, obj );
169 }
GAUDI_API DataObject * getCurrentDataObject()

◆ put() [4/4]

void GaudiRoot::IOHandler< ContainedObject >::put ( TBuffer & b,
void * obj )

Definition at line 181 of file RootIOHandler.cpp.

181 {
182 m_root->WriteBuffer( b, obj );
183 }

Member Data Documentation

◆ m_root

template<class T>
TClass* GaudiRoot::IOHandler< T >::m_root
protected

ROOT persistent class description.

Definition at line 67 of file RootIOHandler.cpp.


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