24 #include "TInterpreter.h"
25 #include "TBufferFile.h"
30 #define SERIALIZER_END "EOF"
33 struct DataObjectPush {
46 if ( level < m_currentItem->depth() ) {
47 if ( dir->
object() != 0 ) {
48 m_objects.push_back(dir->
object());
60 , m_verifyItems(false)
62 , m_addressCreator(ac)
82 m_objects.erase(m_objects.begin(), m_objects.end());
88 status = m_TES->retrieveObject(m_currentItem->path(), obj);
90 m_TESMgr->traverseSubTree(obj,
this);
93 string text(
"WARNING: Cannot retrieve TES object(s) for serialisation: ");
94 text += m_currentItem->path();
105 m_currentItem = (*i);
107 status= m_TES->retrieveObject(m_currentItem->path(), obj);
109 m_TESMgr->traverseSubTree(obj,
this);
114 buffer.WriteInt(m_objects.size());
118 DataObjectPush p(pObj);
122 const type_info& objClass =
typeid(*pObj);
128 if (m_classMap[objClassName]) {
129 cl=m_classMap[objClassName];
132 const char* clName = objClassName.c_str();
134 cl = gROOT->GetClass(clName);
135 m_classMap[objClassName]=cl;
143 cout <<
"WARNING: gROOT->GetClass fails for clname : "
144 << objClassName.c_str() <<
endl;
145 cout <<
"WARNING: Disregarding " << objClassName.c_str()
146 <<
"erasing from object list" <<
endl;
147 m_objects.erase(
i );
154 buffer.WriteString(loc.c_str());
155 buffer.WriteString(cl->GetName());
156 cl->Streamer(pObj,buffer);
160 int numLinks = linkMgr->
size();
161 buffer.WriteInt(numLinks);
163 for (
int it = 0; it != numLinks; it++) {
164 const string& link = linkMgr->
link(it)->
path();
165 buffer.WriteString(link.c_str());
173 const string *
par = iop->
par();
175 long clid = iop->
clID();
176 buffer.WriteLong(svcType);
177 buffer.WriteLong(clid);
178 buffer.WriteString(par->c_str());
212 buffer.SetReadMode();
213 buffer.SetBufferOffset();
215 buffer.ReadInt(nObjects);
216 for (
int i=0;
i<nObjects; ++
i) {
218 buffer.ReadString(text,
sizeof(text));
219 string location(text);
220 if (!location.compare(
"EOF")) {
225 buffer.ReadString(text,
sizeof(text));
226 TClass* cl = gROOT->GetClass(text);
231 cout <<
"TESSerializer WARNING : gROOT->GetClass fails for clname : " << location.c_str() <<
endl;
238 DataObjectPush push(obj);
239 cl->Streamer(obj, buffer);
246 buffer.ReadInt(nlink);
248 for (
int j = 0; j < nlink; ++j) {
249 buffer.ReadString(text,
sizeof(text));
255 registerStat = m_TES->registerObject(location, obj);
258 if ( location ==
"/Event" ) {
259 sc = m_TESMgr->setRoot(location, obj);
261 throw GaudiException(
"Cannot set root at location " + location,
"", sc);
264 m_TES->findObject(location, dummy);
266 m_TES->registerObject(location, obj);
271 buffer.ReadInt(flag);
274 buffer.ReadLong(svcType);
276 buffer.ReadLong(clid);
277 buffer.ReadString(text,
sizeof(text));
289 buffer.ReadInt(flag);
297 buffer.ReadLong(svcType);
300 buffer.ReadLong(clid);
301 const CLID classid(clid);
304 cp = buffer.ReadString(text,
sizeof(text));
305 const string opaque(cp);
309 unsigned long ip1(0);
310 unsigned long ip2(0);
314 createAddressStat = m_addressCreator->createAddress( gadd.
svcType(), gadd.
clID(), gadd.
par(), gadd.
ipar(), iopref );
316 throw GaudiException(
"Failure in creating OpaqueAddress for reconstructed registry",
"", createAddressStat);
335 size_t sep = descriptor.
rfind(
"#");
336 if (sep > descriptor.length()) {
338 obj_path = descriptor;
342 obj_path = descriptor.substr(0,sep);
343 slevel = descriptor.substr(sep+1);
347 if ( slevel ==
"*" ) {
351 level = atoi(slevel.c_str());
355 if ( m_verifyItems ) {
356 size_t idx = obj_path.find(
"/",1);
357 while(idx != std::string::npos) {
359 if ( 0 == findItem(sub_item) ) {
360 cout <<
"... calling addItem with arg : " << sub_item <<
endl;
361 addItem(itms, sub_item);
363 idx = obj_path.find(
"/",idx+1);
376 addItem( m_itemList, path );
382 addItem( m_optItemList, path);
387 cout <<
"TESSerializer m_itemList : " << m_itemList.size() <<
" Items"<<
endl;
389 cout <<
"\tItem : " << (*i)->path() <<
endl;
391 cout <<
"TESSerializer m_optItemList : " << m_optItemList.size() <<
" Items" <<
endl;
393 cout <<
"\tItem : " << (*i)->path() <<
endl;
401 if ( (*i)->path() ==
path )
return (*
i);
404 if ( (*j)->path() ==
path )
return (*j);