File tree Expand file tree Collapse file tree 2 files changed +23
-1
lines changed
Expand file tree Collapse file tree 2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change 2121#include " TSchemaHelper.h"
2222#include < vector>
2323#include < string>
24+ #include < unordered_map>
2425
2526// Forward declarations
2627class TVirtualIsAProxy ;
@@ -72,6 +73,7 @@ namespace ROOT {
7273 std::vector<ROOT::Internal::TSchemaHelper> fReadRules ;
7374 std::vector<ROOT::Internal::TSchemaHelper> fReadRawRules ;
7475 std::vector<ROOT::TClassAlt*> fAlternate ;
76+ std::unordered_map<std::string, TMemberStreamer *> fAdoptedMemberStreamers ;
7577
7678 public:
7779 TGenericClassInfo (const char *fullClassname,
@@ -118,6 +120,7 @@ namespace ROOT {
118120 TClass *IsA (const void *obj);
119121
120122 void AdoptAlternate (ROOT::TClassAlt *alt);
123+ void AdoptMemberStreamer (const char *name, TMemberStreamer *strm);
121124 Short_t AdoptStreamer (TClassStreamer*);
122125 Short_t AdoptCollectionProxy (TVirtualCollectionProxy*);
123126 void AdoptCollectionProxyInfo (Detail::TCollectionProxyInfo*);
Original file line number Diff line number Diff line change @@ -281,7 +281,11 @@ namespace Internal {
281281 fClass ->SetConvStreamerFunc (fConvStreamerFunc );
282282 fClass ->SetMerge (fMerge );
283283 fClass ->SetResetAfterMerge (fResetAfterMerge );
284- fClass ->AdoptStreamer (fStreamer ); fStreamer = nullptr ;
284+ fClass ->AdoptStreamer (fStreamer );
285+ fStreamer = nullptr ;
286+ for (const auto &[name, strm] : fAdoptedMemberStreamers )
287+ fClass ->AdoptMemberStreamer (name.c_str (), strm);
288+ fAdoptedMemberStreamers .clear ();
285289 // If IsZombie is true, something went wrong and we will not be
286290 // able to properly copy the collection proxy
287291 if (!fClass ->IsZombie ()) {
@@ -434,6 +438,21 @@ namespace Internal {
434438 fAlternate .push_back (alt);
435439 }
436440
441+ void TGenericClassInfo::AdoptMemberStreamer (const char *name, TMemberStreamer *strm)
442+ {
443+ if (fClass ) {
444+ assert (fAdoptedMemberStreamers .empty ());
445+ fClass ->AdoptMemberStreamer (name, strm);
446+ return ;
447+ }
448+
449+ auto [it, inserted] = fAdoptedMemberStreamers .emplace (name, strm);
450+ if (!inserted) {
451+ delete it->second ;
452+ it->second = strm;
453+ }
454+ }
455+
437456 void TGenericClassInfo::AdoptCollectionProxyInfo (TCollectionProxyInfo *info)
438457 {
439458 // Set the info for the CollectionProxy and take ownership of the object
You can’t perform that action at this time.
0 commit comments