208         Error(
"AddBefore", 
"before not found, object not added");
 
  262         Error(
"AddAfter", 
"after not found, object not added");
 
  265      if (t == 
fLast.get())
 
  268         NewLink(obj, t->shared_from_this());
 
 
  361   if (
lnk) 
return lnk->GetObject();
 
 
  439      auto obj = 
tlk->GetObject();
 
  442            Error(
"Clear", 
"A list is accessing an object (%p) already deleted (list name = %s)",
 
  444         } 
else if (obj->IsOnHeap()) {
 
 
  501         auto obj = 
tlk->GetObject();
 
  503            Error(
"Delete", 
"A list is accessing an object (%p) already deleted (list name = %s)",
 
  505         else if (obj && obj->IsOnHeap())
 
  507         else if (obj && obj->IsA()->GetDirectoryAutoAdd())
 
  527         first = first->fNext;
 
  529         auto obj = 
tlk->GetObject();
 
  530         tlk->SetObject(
nullptr);
 
  532            Error(
"Delete", 
"A list is accessing an object (%p) already deleted (list name = %s)",
 
  534         else if (obj && obj->IsOnHeap())
 
  536         else if (obj && obj->IsA()->GetDirectoryAutoAdd())
 
  551      (*
dirRem->IsA()->GetDirectoryAutoAdd())(
dirRem, 
nullptr);
 
 
  564   lnk->fNext = 
lnk->fPrev = 0;
 
  587         const char *
objname = obj->GetName();
 
 
  616      if (
ob->IsEqual(obj)) 
return ob;
 
 
  635   if (!
fFirst) 
return nullptr;
 
  642      object = 
lnk->GetObject();
 
 
  682      if (
ob->IsEqual(obj)) 
return lnk->GetObjectRef();
 
 
  710   while (i < idx && 
lnk) {
 
 
  736   auto newlink = std::make_shared<TObjLink>(obj);
 
 
  751   auto newlink = std::make_shared<TObjOptLink>(obj, opt);
 
 
  775      if (
cached && 
cached->fNext.get() == 
nullptr && 
cached->fPrev.lock().get() == 
nullptr) {
 
  778            ob->RecursiveRemove(obj);
 
  789         if (
ob->IsEqual(obj)) {
 
  790            lnk->SetObject(
nullptr);
 
  800               fLast->fNext.reset();
 
  803               lnk->Prev()->fNext = next;
 
  804               lnk->Next()->fPrev = 
lnk->fPrev;
 
  811            ob->RecursiveRemove(obj);
 
 
  824   if (!obj) 
return nullptr;
 
  829   if (!
lnk) 
return nullptr;
 
  837   lnk->SetObject(
nullptr);
 
  850      fLast->fNext.reset();
 
  853      lnk->Next()->fPrev = 
lnk->fPrev;
 
  854      lnk->Prev()->fNext = 
lnk->fNext;
 
 
  872   if (!
lnk) 
return nullptr;
 
  877   lnk->SetObject(
nullptr);
 
  890      fLast->fNext.reset();
 
  893      lnk->Next()->fPrev = 
lnk->fPrev;
 
  894      lnk->Prev()->fNext = 
lnk->fNext;
 
 
  915   lnk->SetObject(
nullptr);
 
  921      fLast->fNext.reset();
 
 
  944   if (!
fFirst->GetObject()->IsSortable()) {
 
  945      Error(
"Sort", 
"objects in list are not sortable");
 
  954   if (
lnk.get()) 
lnk->fPrev.reset();
 
 
  972   Int_t cmp = 
l1->GetObject()->Compare(
l2->GetObject());
 
 
  987   std::shared_ptr<TObjLink> 
p1, 
p2, *h2, *
t2;
 
  994         return &((*head)->fNext);
 
  997         p2 = (
p1 = *head)->fNext;
 
  999         p1->fNext = (*head = 
p2)->fNext;
 
 1000         return &((
p2->fNext = 
p1)->fNext);
 
 1010         if (!--
n) 
return *h2 = 
p2, 
t2;
 
 1017         if (!--
m) 
return *h2 = *
t2, *
t2 = 
p1, h2;
 
 1021         if (!--
n) 
return *h2 = 
p2, 
t2;
 
 
 1053        : fList(
l), fCurCursor(nullptr), fCursor(nullptr), fDirection(dir), fStarted(
kFALSE)
 
 
 
 1111   if (!
fList) 
return nullptr;
 
 
 1199   if (
b.IsReading()) {
 
 1210            if (
v > 4 && 
nch == 255)  {
 
 1252         obj = 
lnk->GetObject();
 
 1264         b.WriteFastArray(
lnk->GetAddOption(),
nbig);
 
 
 
 
#define R__COLLECTION_READ_LOCKGUARD(mutex)
#define R__COLLECTION_WRITE_GUARD()
#define R__COLLECTION_READ_GUARD()
const Bool_t kIterForward
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__COLLECTION_ITER_GUARD(collection)
#define R__COLLECTION_WRITE_LOCKGUARD(mutex)
Buffer base class used for serializing objects.
Bool_t IsArgNull(const char *where, const TObject *obj) const
Returns true if object is a null pointer.
const char * GetName() const override
Return name of this collection.
static void GarbageCollect(TObject *obj)
Add to the list of things to be cleaned up.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Iterator abstract base class.
Option_t * GetOption() const override
Returns the object option stored in the list.
void Reset() override
Reset list iterator.
TObject * Next() override
Return next object in the list. Returns 0 when no more objects in list.
TIterator & operator=(const TIterator &rhs) override
Overridden assignment operator.
void SetOption(Option_t *option)
Sets the object option stored in the list.
Bool_t operator!=(const TIterator &aIter) const override
This operator compares two TIterator objects.
TClass * IsA() const override
Bool_t LnkCompare(const TObjLinkPtr_t &l1, const TObjLinkPtr_t &l2)
Compares the objects stored in the TObjLink objects.
void Streamer(TBuffer &) override
Stream all objects in the collection to or from the I/O buffer.
void AddAfter(const TObject *after, TObject *obj) override
Insert object after object after in the list.
TObject * After(const TObject *obj) const override
Returns the object after object obj.
TObjLinkPtr_t NewOptLink(TObject *obj, Option_t *opt, const TObjLinkPtr_t &prev=nullptr)
Return a new TObjOptLink (a TObjLink that also stores the option).
void Clear(Option_t *option="") override
Remove all objects from the list.
TObject ** GetObjectRef(const TObject *obj) const override
Return address of pointer to obj.
virtual ~TList()
Delete the list.
Bool_t fAscending
cache to speedup sequential calling of Before() and After() functions
void AddAt(TObject *obj, Int_t idx) override
Insert object at position idx in the list.
TObject * Before(const TObject *obj) const override
Returns the object before object obj.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void RecursiveRemove(TObject *obj) override
Remove object from this collection and recursively remove the object from all other objects (and coll...
TObjLink * FindLink(const TObject *obj, Int_t &idx) const
Returns the TObjLink object that contains object obj.
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
void AddLast(TObject *obj) override
Add object at the end of the list.
TObject * Last() const override
Return the last object in the list. Returns 0 when list is empty.
std::shared_ptr< TObjLink > TObjLinkPtr_t
TObject * First() const override
Return the first object in the list. Returns 0 when list is empty.
TObjLinkPtr_t fLast
pointer to first entry in linked list
void InsertAfter(const TObjLinkPtr_t &newlink, const TObjLinkPtr_t &prev)
Insert a new link in the chain.
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Return a list iterator.
void AddBefore(const TObject *before, TObject *obj) override
Insert object before object before in the list.
TObjLink * LinkAt(Int_t idx) const
sorting order (when calling Sort() or for TSortedList)
virtual TObjLink * FirstLink() const
TObjLinkPtr_t NewLink(TObject *obj, const TObjLinkPtr_t &prev=nullptr)
Return a new TObjLink.
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
TObjLinkWeakPtr_t fCache
pointer to last entry in linked list
TClass * IsA() const override
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
void RemoveLast() override
Remove the last object of the list.
TObjLinkPtr_t * DoSort(TObjLinkPtr_t *head, Int_t n)
Sort linked list.
void AddFirst(TObject *obj) override
Add object at the beginning of the list.
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
Wrapper around a TObject so it can be stored in a TList.
TObject * GetObject() const
Mother of all ROOT objects.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
@ kCanDelete
if object in a list can be deleted
virtual void Streamer(TBuffer &)
Stream a string object.
R__ALWAYS_INLINE bool HasBeenDeleted(const TObject *obj)
Check if the TObject's memory has been deleted.
R__EXTERN TVirtualRWMutex * gCoreMutex