48 TFree::TFree(TList *lfree, Long64_t first, Long64_t last)
67 TFree *TFree::AddFree(TList *lfree, Long64_t first, Long64_t last)
71 Long64_t curfirst = idcur->GetFirst();
72 Long64_t curlast = idcur->GetLast();
73 if (curlast == first-1) {
75 TFree *idnext = (TFree*)lfree->After(idcur);
76 if (idnext == 0)
return idcur;
77 if (idnext->GetFirst() > last+1)
return idcur;
78 idcur->SetLast( idnext->GetLast() );
79 lfree->Remove(idnext);
83 if (curfirst == last+1) {
84 idcur->SetFirst(first);
87 if (first < curfirst) {
88 TFree * newfree =
new TFree();
89 newfree->SetFirst(first);
90 newfree->SetLast(last);
91 lfree->AddBefore(idcur, newfree);
94 idcur = (TFree*)lfree->After(idcur);
109 void TFree::FillBuffer(
char *&buffer)
111 Version_t version = TFree::Class_Version();
112 if (fLast > TFile::kStartBigFile) version += 1000;
113 tobuf(buffer, version);
115 if (version > 1000) {
116 tobuf(buffer, fFirst);
117 tobuf(buffer, fLast);
119 tobuf(buffer, (Int_t)fFirst);
120 tobuf(buffer, (Int_t)fLast);
127 TFree *TFree::GetBestFree(TList *lfree, Int_t nbytes)
130 if (idcur == 0)
return 0;
133 Long64_t nleft = Long64_t(idcur->fLast - idcur->fFirst +1);
134 if (nleft == nbytes) {
138 if(nleft > (Long64_t)(nbytes+3)) {
143 idcur = (TFree*)lfree->After(idcur);
147 if (idcur1)
return idcur1;
150 idcur = (TFree*)lfree->Last();
151 Long64_t last = idcur->fLast+1000000000LL;
152 idcur->SetLast(last);
159 void TFree::ls(Option_t *)
const
161 std::cout <<
"Free Segment: "<<fFirst<<
"\t"<<fLast<<std::endl;
167 void TFree::ReadBuffer(
char *&buffer)
170 frombuf(buffer, &version);
171 if (version > 1000) {
172 frombuf(buffer, &fFirst);
173 frombuf(buffer, &fLast);
176 frombuf(buffer, &first); fFirst = (Long64_t)first;
177 frombuf(buffer, &last); fLast = (Long64_t)last;
184 Int_t TFree::Sizeof()
const
187 if (fLast > TFile::kStartBigFile)
return 18;