43 THashList::THashList(Int_t capacity, Int_t rehash)
45 fTable =
new THashTable(capacity, rehash);
51 THashList::THashList(TObject *, Int_t capacity, Int_t rehash)
53 fTable =
new THashTable(capacity, rehash);
60 THashList::~THashList()
69 void THashList::AddFirst(TObject *obj)
71 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
84 void THashList::AddFirst(TObject *obj, Option_t *opt)
86 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
88 TList::AddFirst(obj, opt);
95 void THashList::AddLast(TObject *obj)
97 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
110 void THashList::AddLast(TObject *obj, Option_t *opt)
112 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
114 TList::AddLast(obj, opt);
121 void THashList::AddBefore(
const TObject *before, TObject *obj)
123 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
125 TList::AddBefore(before, obj);
126 fTable->AddBefore(before, obj);
132 void THashList::AddBefore(TObjLink *before, TObject *obj)
134 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
136 TList::AddBefore(before, obj);
137 fTable->AddBefore(before->GetObject(), obj);
143 void THashList::AddAfter(
const TObject *after, TObject *obj)
145 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
147 TList::AddAfter(after, obj);
154 void THashList::AddAfter(TObjLink *after, TObject *obj)
156 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
158 TList::AddAfter(after, obj);
165 void THashList::AddAt(TObject *obj, Int_t idx)
167 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
169 TList::AddAt(obj, idx);
178 Float_t THashList::AverageCollisions()
const
180 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
182 return fTable->AverageCollisions();
189 void THashList::Clear(Option_t *option)
191 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
193 fTable->Clear(
"nodelete");
195 TList::Delete(option);
197 TList::Clear(option);
207 void THashList::Delete(Option_t *option)
209 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
211 Bool_t slow = option ? (!strcmp(option,
"slow") ? kTRUE : kFALSE) : kFALSE;
214 fTable->Clear(
"nodelete");
215 TList::Delete(option);
217 TList removeDirectory;
221 fFirst = fFirst->NextSP();
224 fTable->Remove(tlk->GetObject());
227 auto obj = tlk->GetObject();
229 tlk->SetObject(
nullptr);
230 if (obj && !obj->TestBit(kNotDeleted))
231 Error(
"Delete",
"A list is accessing an object (%p) already deleted (list name = %s)",
233 else if (obj && obj->IsOnHeap())
234 TCollection::GarbageCollect(obj);
235 else if (obj && obj->IsA()->GetDirectoryAutoAdd())
236 removeDirectory.Add(obj);
249 TIter iRemDir(&removeDirectory);
251 while ((dirRem = iRemDir())) {
252 (*dirRem->IsA()->GetDirectoryAutoAdd())(dirRem, 0);
262 TObject *THashList::FindObject(
const char *name)
const
264 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
266 return fTable->FindObject(name);
272 TObject *THashList::FindObject(
const TObject *obj)
const
274 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
276 return fTable->FindObject(obj);
283 const TList *THashList::GetListForObject(
const char *name)
const
285 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
287 return fTable->GetListForObject(name);
294 const TList *THashList::GetListForObject(
const TObject *obj)
const
296 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
298 return fTable->GetListForObject(obj);
310 void THashList::RecursiveRemove(TObject *obj)
320 if (obj->HasInconsistentHash()) {
321 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
324 TObject *
object = TList::Remove(obj);
326 fTable->RemoveSlow(
object);
328 }
else if (fTable->FindObject(obj)) {
329 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
332 TObject *
object = TList::Remove(obj);
334 fTable->Remove(
object);
351 next = lnk->NextSP();
352 TObject *ob = lnk->GetObject();
353 if (ob && ob->TestBit(kNotDeleted)) {
354 ob->RecursiveRemove(obj);
368 void THashList::Rehash(Int_t newCapacity)
370 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
372 fTable->Rehash(newCapacity);
378 TObject *THashList::Remove(TObject *obj)
380 R__COLLECTION_READ_LOCKGUARD(ROOT::gCoreMutex);
381 if (!obj || !fTable->FindObject(obj))
return 0;
383 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
385 return fTable->Remove(obj);
391 TObject *THashList::Remove(TObjLink *lnk)
395 R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);
396 TObject *obj = lnk->GetObject();
399 return fTable->Remove(obj);
409 bool THashList::UseRWLock()
412 return TCollection::UseRWLock();