@@ -78,6 +78,21 @@ namespace {
7878         if  (fOnfileObject ) fBuffer .PopDataCache ();
7979      }
8080   };
81+    bool  IsAssociativeContainer (Int_t stltype) {
82+       switch  (stltype) {
83+          case  ROOT::kSTLset :
84+          case  ROOT::kSTLmultiset :
85+          case  ROOT::kSTLunorderedset :
86+          case  ROOT::kSTLunorderedmultiset :
87+          case  ROOT::kSTLmap :
88+          case  ROOT::kSTLmultimap :
89+          case  ROOT::kSTLunorderedmap :
90+          case  ROOT::kSTLunorderedmultimap :
91+             return  true ;
92+          default :
93+             return  false ;
94+       }
95+    }
8196}
8297
8398// //////////////////////////////////////////////////////////////////////////////
@@ -2711,27 +2726,16 @@ Int_t TBranchElement::GetEntry(Long64_t entry, Int_t getall)
27112726         }
27122727         nbytes += nb;
27132728      }
2714-       switch (fSTLtype ) {
2715-          case  ROOT::kSTLset :
2716-          case  ROOT::kSTLmultiset :
2717-          case  ROOT::kSTLunorderedset :
2718-          case  ROOT::kSTLunorderedmultiset :
2719-          case  ROOT::kSTLmap :
2720-          case  ROOT::kSTLmultimap :
2721-          case  ROOT::kSTLunorderedmap :
2722-          case  ROOT::kSTLunorderedmultimap :
2723-             break ;
2724-          default :
2725-             ValidateAddress (); //  There is no ReadLeave for this node, so we need to do the validation here.
2726-             for  (Int_t i = 0 ; i < nbranches; ++i) {
2727-                TBranch* branch = (TBranch*) fBranches .UncheckedAt (i);
2728-                Int_t nb = branch->GetEntry (entry, getall);
2729-                if  (nb < 0 ) {
2730-                   return  nb;
2731-                }
2732-                nbytes += nb;
2729+       if  (!IsAssociativeContainer (fSTLtype )) {
2730+          ValidateAddress (); //  There is no ReadLeave for this node, so we need to do the validation here.
2731+          for  (Int_t i = 0 ; i < nbranches; ++i) {
2732+             TBranch* branch = (TBranch*) fBranches .UncheckedAt (i);
2733+             Int_t nb = branch->GetEntry (entry, getall);
2734+             if  (nb < 0 ) {
2735+                return  nb;
27332736            }
2734-             break ;
2737+             nbytes += nb;
2738+          }
27352739      }
27362740      if  (!TestBit (kDecomposedObj ) && fReadActionSequence  && !fReadActionSequence ->fActions .empty ()) {
27372741         if  (fType  == 3 ) {
@@ -4060,23 +4064,14 @@ void TBranchElement::ReadLeavesMakeClass(TBuffer& b)
40604064         }
40614065      }
40624066      fNdata  = n[0 ];
4063-       if  (fType  == 4 )    {
4067+       if  (fType  == 4  &&  IsAssociativeContainer ( fSTLtype ))  {
40644068         Int_t nbranches = fBranches .GetEntriesFast ();
4065-          switch (fSTLtype ) {
4066-             case  ROOT::kSTLset :
4067-             case  ROOT::kSTLmultiset :
4068-             case  ROOT::kSTLmap :
4069-             case  ROOT::kSTLmultimap :
4070-                for  (Int_t i=0 ; i<nbranches; i++) {
4071-                   TBranch *branch = (TBranch*)fBranches [i];
4072-                   Int_t nb = branch->GetEntry (GetReadEntry (), 1 );
4073-                   if  (nb < 0 ) {
4074-                      break ;
4075-                   }
4076-                }
4077-                break ;
4078-             default :
4069+          for  (Int_t i=0 ; i<nbranches; i++) {
4070+             TBranch *branch = (TBranch*)fBranches [i];
4071+             Int_t nb = branch->GetEntry (GetReadEntry (), 1 );
4072+             if  (nb < 0 ) {
40794073               break ;
4074+             }
40804075         }
40814076      }
40824077      return ;
@@ -4328,28 +4323,17 @@ void TBranchElement::ReadLeavesCollection(TBuffer& b)
43284323      fIterators ->CreateIterators (alternate, proxy);
43294324   }
43304325
4331-    Int_t nbranches = fBranches .GetEntriesFast ();
4332-    switch  (fSTLtype ) {
4333-       case  ROOT::kSTLset :
4334-       case  ROOT::kSTLunorderedset :
4335-       case  ROOT::kSTLunorderedmultiset :
4336-       case  ROOT::kSTLmultiset :
4337-       case  ROOT::kSTLmap :
4338-       case  ROOT::kSTLmultimap :
4339-       case  ROOT::kSTLunorderedmap :
4340-       case  ROOT::kSTLunorderedmultimap :
4341-          for  (Int_t i = 0 ; i < nbranches; ++i) {
4342-             TBranch *branch = (TBranch*) fBranches [i];
4343-             Int_t nb = branch->GetEntry (GetReadEntry (), 1 );
4344-             if  (nb < 0 ) {
4345-                //  Give up on i/o failure.
4346-                //  FIXME: We need an error message here.
4347-                break ;
4348-             }
4326+    if  (IsAssociativeContainer (fSTLtype )) {
4327+       Int_t nbranches = fBranches .GetEntriesFast ();
4328+       for  (Int_t i = 0 ; i < nbranches; ++i) {
4329+          TBranch *branch = (TBranch*) fBranches [i];
4330+          Int_t nb = branch->GetEntry (GetReadEntry (), 1 );
4331+          if  (nb < 0 ) {
4332+             //  Give up on i/o failure.
4333+             //  FIXME: We need an error message here.
4334+             break ;
43494335         }
4350-          break ;
4351-       default :
4352-          break ;
4336+       }
43534337   }
43544338   // ------------------------------------------------------------------------
43554339   //  We have split this stuff, so we need to create the pointers
0 commit comments