Skip to content

Commit ab1fafe

Browse files
committed
In TStreamerSTL replace std::set and std::multimap when wrong
Do it like in native ROOT streamer for TStreamerSTL class
1 parent 7b7a0bc commit ab1fafe

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

scripts/JSRootIOEvolution.js

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1976,18 +1976,6 @@
19761976

19771977
var stl = (element.fSTLtype || 0) % 40;
19781978

1979-
// FIXME: this is workaround due to wrong type id in the streamer element
1980-
// example is ?file=https://root.cern/files/RelValMinBias-GEN-SIM-RECO.root&item=MetaData;1/ProductRegistry&opt=dump
1981-
// is it old ROOT file ?
1982-
if ((element._typename === 'TStreamerSTL') && (stl>0) && (stl<JSROOT.IO.StlNames.length))
1983-
if (element.fTypeName.indexOf(JSROOT.IO.StlNames[stl]+"<")!=0) {
1984-
console.warn('STL type mismatch for ', element.fTypeName, ' got wrong type ', stl, JSROOT.IO.StlNames[stl]);
1985-
for (var k=1;k<JSROOT.IO.StlNames.length;++k)
1986-
if (element.fTypeName.indexOf(JSROOT.IO.StlNames[k]+"<")==0) { stl = k; break; }
1987-
1988-
console.warn('Now for', element.fTypeName, ' use type ', stl, JSROOT.IO.StlNames[stl]);
1989-
}
1990-
19911979
if ((element._typename === 'TStreamerSTLstring') ||
19921980
(member.typename == "string") || (member.typename == "string*")) {
19931981
member.readelem = function(buf) { return buf.ReadTString(); };
@@ -2590,11 +2578,17 @@
25902578
};
25912579

25922580
cs['TStreamerSTL'] = function(buf, elem) {
2593-
if (buf.last_read_version > 1) {
2594-
buf.ClassStreamer(elem, "TStreamerElement");
2595-
elem.fSTLtype = buf.ntou4();
2596-
elem.fCtype = buf.ntou4();
2597-
}
2581+
buf.ClassStreamer(elem, "TStreamerElement");
2582+
elem.fSTLtype = buf.ntou4();
2583+
elem.fCtype = buf.ntou4();
2584+
2585+
if ((elem.fSTLtype === JSROOT.IO.kSTLmultimap) &&
2586+
((elem.fTypeName.indexOf("std::set")===0) ||
2587+
(elem.fTypeName.indexOf("set")==0))) elem.fSTLtype = JSROOT.IO.kSTLset;
2588+
2589+
if ((elem.fSTLtype === JSROOT.IO.kSTLset) &&
2590+
((elem.fTypeName.indexOf("std::multimap")===0) ||
2591+
(elem.fTypeName.indexOf("multimap")===0))) elem.fSTLtype = JSROOT.IO.kSTLmultimap;
25982592
};
25992593

26002594
cs['TStreamerSTLstring'] = function(buf, elem) {

0 commit comments

Comments
 (0)