46 TBranchRef::TBranchRef(): TBranch(), fRequestedEntry(-1), fRefTable(0)
48 fReadLeaves = (ReadLeaves_t)&TBranchRef::ReadLeavesImpl;
49 fFillLeaves = (FillLeaves_t)&TBranchRef::FillLeavesImpl;
55 TBranchRef::TBranchRef(TTree *tree)
56 : TBranch(), fRequestedEntry(-1), fRefTable(0)
60 SetTitle(
"List of branch numbers with referenced objects");
61 fRefTable =
new TRefTable(
this,100);
66 fBasketBytes =
new Int_t[fMaxBaskets];
67 fBasketEntry =
new Long64_t[fMaxBaskets];
68 fBasketSeek =
new Long64_t[fMaxBaskets];
70 for (Int_t i=0;i<fMaxBaskets;i++) {
78 fDirectory = fTree->GetDirectory();
80 fReadLeaves = (ReadLeaves_t)&TBranchRef::ReadLeavesImpl;
81 fFillLeaves = (FillLeaves_t)&TBranchRef::FillLeavesImpl;
87 TBranchRef::~TBranchRef()
95 void TBranchRef::Clear(Option_t *option)
97 if (fRefTable) fRefTable->Clear(option);
103 Int_t TBranchRef::FillImpl(ROOT::Internal::TBranchIMTHelper *imtHelper)
105 Int_t nbytes = TBranch::FillImpl(imtHelper);
115 Bool_t TBranchRef::Notify()
117 if (!fRefTable) fRefTable =
new TRefTable(
this,100);
118 UInt_t uid = fRefTable->GetUID();
119 TProcessID* context = fRefTable->GetUIDContext();
120 if (fReadEntry != fRequestedEntry) {
122 GetEntry(fRequestedEntry);
124 TBranch *branch = (TBranch*)fRefTable->GetParent(uid, context);
127 if (branch->GetReadEntry() != fRequestedEntry)
128 branch->GetEntry(fRequestedEntry);
131 TList *friends = fTree->GetListOfFriends();
132 if (!friends)
return kTRUE;
133 TObjLink *lnk = friends->FirstLink();
135 TFriendElement* elem = (TFriendElement*)lnk->GetObject();
136 TTree *tree = elem->GetTree();
137 TBranchRef *bref = tree->GetBranchRef();
139 if (bref->GetReadEntry() != fRequestedEntry) {
140 bref->GetEntry(fRequestedEntry);
142 branch = (TBranch*)bref->GetRefTable()->GetParent(uid, context);
145 if (branch->GetReadEntry() != fRequestedEntry)
146 branch->GetEntry(fRequestedEntry);
159 void TBranchRef::Print(Option_t *option)
const
161 TBranch::Print(option);
167 void TBranchRef::ReadLeavesImpl(TBuffer &b)
169 if (!fRefTable) fRefTable =
new TRefTable(
this,100);
170 fRefTable->ReadBuffer(b);
176 void TBranchRef::FillLeavesImpl(TBuffer &b)
178 if (!fRefTable) fRefTable =
new TRefTable(
this,100);
179 fRefTable->FillBuffer(b);
187 void TBranchRef::Reset(Option_t *option)
189 TBranch::Reset(option);
190 if (!fRefTable) fRefTable =
new TRefTable(
this,100);
198 void TBranchRef::ResetAfterMerge(TFileMergeInfo *info)
200 TBranch::ResetAfterMerge(info);
201 if (!fRefTable) fRefTable =
new TRefTable(
this,100);
212 Int_t TBranchRef::SetParent(
const TObject*
object, Int_t branchID)
215 fRefTable =
new TRefTable(
this, 100);
217 TRefTable::SetRefTable(fRefTable);
218 return fRefTable->SetParent(
object, branchID);