Skip to content

[core] AddBefore/After/At option variant, as with Add/First/Last v3 #18389

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/base/src/TUrl.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,7 @@ void TUrl::ParseOptions() const
fOptionsMap->Add(new TObjString(key), new TObjString(value));
} else {
TString key = ((TObjString *) objTags->At(0))->GetName();
fOptionsMap->Add(new TObjString(key), nullptr);
fOptionsMap->Add(new TObjString(key), static_cast<TObject *>(nullptr));
}
delete objTags;
}
Expand Down
6 changes: 6 additions & 0 deletions core/cont/inc/TBtree.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,17 @@ friend class TBtLeafNode;
TIterator *MakeIterator(Bool_t dir = kIterForward) const override;

void Add(TObject *obj) override;
void Add(TObject *obj, Option_t *) override { Add(obj); };
void AddFirst(TObject *obj) override { Add(obj); }
void AddFirst(TObject *obj, Option_t *) override { Add(obj); }
void AddLast(TObject *obj) override { Add(obj); }
void AddLast(TObject *obj, Option_t *) override { Add(obj); }
void AddAt(TObject *obj, Int_t) override { Add(obj); }
void AddAt(TObject *obj, Int_t, Option_t *) override { Add(obj); }
void AddAfter(const TObject *, TObject *obj) override { Add(obj); }
void AddAfter(const TObject *, TObject *obj, Option_t *) override { Add(obj); }
void AddBefore(const TObject *, TObject *obj) override { Add(obj); }
void AddBefore(const TObject *, TObject *obj, Option_t *) override { Add(obj); }
TObject *Remove(TObject *obj) override;

TObject *At(Int_t idx) const override;
Expand Down
5 changes: 5 additions & 0 deletions core/cont/inc/TClonesArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,17 @@ class TClonesArray : public TObjArray {
void SetOwner(Bool_t enable = kTRUE) override;

void AddFirst(TObject *) override { MayNotUse("AddFirst"); }
void AddFirst(TObject *, Option_t *) override { MayNotUse("AddFirst"); }
void AddLast(TObject *) override { MayNotUse("AddLast"); }
void AddLast(TObject *, Option_t *) override { MayNotUse("AddLast"); }
void AddAt(TObject *, Int_t) override { MayNotUse("AddAt"); }
void AddAt(TObject *, Int_t, Option_t *) override { MayNotUse("AddAt"); }
void AddAtAndExpand(TObject *, Int_t) override { MayNotUse("AddAtAndExpand"); }
Int_t AddAtFree(TObject *) override { MayNotUse("AddAtFree"); return 0; }
void AddAfter(const TObject *, TObject *) override { MayNotUse("AddAfter"); }
void AddAfter(const TObject *, TObject *, Option_t *) override { MayNotUse("AddAfter"); }
void AddBefore(const TObject *, TObject *) override { MayNotUse("AddBefore"); }
void AddBefore(const TObject *, TObject *, Option_t *) override { MayNotUse("AddBefore"); }
void BypassStreamer(Bool_t bypass=kTRUE);
Bool_t CanBypassStreamer() const { return TestBit(kBypassStreamer); }
TObject *ConstructedAt(Int_t idx);
Expand Down
1 change: 1 addition & 0 deletions core/cont/inc/TCollection.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ class TCollection : public TObject {

virtual ~TCollection();
virtual void Add(TObject *obj) = 0;
virtual void Add(TObject */*obj*/, Option_t */*opt*/) { AbstractMethod("Add"); };
void AddVector(TObject *obj1, ...);
virtual void AddAll(const TCollection *col);
Bool_t AssertClass(TClass *cl) const;
Expand Down
5 changes: 5 additions & 0 deletions core/cont/inc/THashList.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,15 @@ class THashList : public TList {
void AddLast(TObject *obj) override;
void AddLast(TObject *obj, Option_t *opt) override;
void AddAt(TObject *obj, Int_t idx) override;
void AddAt(TObject *obj, Int_t idx, Option_t *opt) override;
void AddAfter(const TObject *after, TObject *obj) override;
void AddAfter(TObjLink *after, TObject *obj) override;
void AddAfter(const TObject *after, TObject *obj, Option_t *opt) override;
void AddAfter(TObjLink *after, TObject *obj, Option_t *opt) override;
void AddBefore(const TObject *before, TObject *obj) override;
void AddBefore(TObjLink *before, TObject *obj) override;
void AddBefore(const TObject *before, TObject *obj, Option_t *opt) override;
void AddBefore(TObjLink *before, TObject *obj, Option_t *opt) override;
void RecursiveRemove(TObject *obj) override;
void Rehash(Int_t newCapacity);
TObject *Remove(TObject *obj) override;
Expand Down
1 change: 1 addition & 0 deletions core/cont/inc/THashTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ friend class THashTableIter;
THashTable(Int_t capacity = TCollection::kInitHashTableCapacity, Int_t rehash = 0);
virtual ~THashTable();
void Add(TObject *obj) override;
void Add(TObject *obj, Option_t *) override { Add(obj); };
void AddBefore(const TObject *before, TObject *obj);
void AddAll(const TCollection *col) override;
Float_t AverageCollisions() const;
Expand Down
13 changes: 9 additions & 4 deletions core/cont/inc/TList.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,22 @@ friend class TListIter;
TIterator *MakeIterator(Bool_t dir = kIterForward) const override;

void Add(TObject *obj) override { AddLast(obj); }
virtual void Add(TObject *obj, Option_t *opt) { AddLast(obj, opt); }
void Add(TObject *obj, Option_t *opt) override { AddLast(obj, opt); }
void AddFirst(TObject *obj) override;
virtual void AddFirst(TObject *obj, Option_t *opt);
void AddFirst(TObject *obj, Option_t *opt) override;
void AddLast(TObject *obj) override;
virtual void AddLast(TObject *obj, Option_t *opt);
void AddLast(TObject *obj, Option_t *opt) override;
void AddAt(TObject *obj, Int_t idx) override;
void AddAt(TObject *obj, Int_t idx, Option_t *opt) override;
void AddAfter(const TObject *after, TObject *obj) override;
virtual void AddAfter(TObjLink *after, TObject *obj);
void AddAfter(const TObject *after, TObject *obj, Option_t *opt) override;
virtual void AddAfter(TObjLink *after, TObject *obj, Option_t *opt);
void AddBefore(const TObject *before, TObject *obj) override;
virtual void AddBefore(TObjLink *before, TObject *obj);
TObject *Remove(TObject *obj) override;
void AddBefore(const TObject *before, TObject *obj, Option_t *opt) override;
virtual void AddBefore(TObjLink *before, TObject *obj, Option_t *opt);
TObject *Remove(TObject *obj) override;
virtual TObject *Remove(TObjLink *lnk);
TObject *Remove(const TObjLinkPtr_t &lnk) { return Remove(lnk.get()); }
void RemoveLast() override;
Expand Down
1 change: 1 addition & 0 deletions core/cont/inc/TMap.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ friend class TMapIter;
TMap(Int_t capacity = TCollection::kInitHashTableCapacity, Int_t rehash = 0);
virtual ~TMap();
void Add(TObject *obj) override;
void Add(TObject *obj, Option_t *) override { Add(obj); };
void Add(TObject *key, TObject *value);
Float_t AverageCollisions() const;
Int_t Capacity() const;
Expand Down
6 changes: 6 additions & 0 deletions core/cont/inc/TObjArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,19 @@ friend class TClonesArray;
TIterator *MakeIterator(Bool_t dir = kIterForward) const override;

void Add(TObject *obj) override { AddLast(obj); }
void Add(TObject *obj, Option_t *) override { AddLast(obj); }
void AddFirst(TObject *obj) override;
void AddFirst(TObject *obj, Option_t *) override { AddFirst(obj); }
void AddLast(TObject *obj) override;
void AddLast(TObject *obj, Option_t *) override { AddLast(obj); }
void AddAt(TObject *obj, Int_t idx) override;
void AddAt(TObject *obj, Int_t idx, Option_t *) override { AddAt(obj, idx); }
virtual void AddAtAndExpand(TObject *obj, Int_t idx);
virtual Int_t AddAtFree(TObject *obj);
void AddAfter(const TObject *after, TObject *obj) override;
void AddAfter(const TObject *after, TObject *obj, Option_t *) override { AddAfter(after, obj); }
void AddBefore(const TObject *before, TObject *obj) override;
void AddBefore(const TObject *before, TObject *obj, Option_t *) override { AddBefore(before, obj); }
TObject *FindObject(const char *name) const override;
TObject *FindObject(const TObject *obj) const override;
TObject *RemoveAt(Int_t idx) override;
Expand Down
5 changes: 5 additions & 0 deletions core/cont/inc/TOrdCollection.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,15 @@ friend class TOrdCollectionIter;
TIterator *MakeIterator(Bool_t dir = kIterForward) const override;

void AddFirst(TObject *obj) override;
void AddFirst(TObject *obj, Option_t *) override { AddFirst(obj); }
void AddLast(TObject *obj) override;
void AddLast(TObject *obj, Option_t *) override { AddLast(obj); }
void AddAt(TObject *obj, Int_t idx) override;
void AddAt(TObject *obj, Int_t idx, Option_t *) override { AddAt(obj, idx); }
void AddAfter(const TObject *after, TObject *obj) override;
void AddAfter(const TObject *after, TObject *obj, Option_t *) override { AddAfter(after, obj); }
void AddBefore(const TObject *before, TObject *obj) override;
void AddBefore(const TObject *before, TObject *obj, Option_t *) override { AddBefore(before, obj); }
void PutAt(TObject *obj, Int_t idx);
TObject *RemoveAt(Int_t idx) override;
TObject *Remove(TObject *obj) override;
Expand Down
6 changes: 6 additions & 0 deletions core/cont/inc/TRefArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,19 @@ friend class TRefArrayIter;
TIterator *MakeIterator(Bool_t dir = kIterForward) const override;

void Add(TObject *obj) override { AddLast(obj); }
void Add(TObject *obj, Option_t *opt) override { AddLast(obj, opt); }
void AddFirst(TObject *obj) override;
void AddFirst(TObject *obj, Option_t *) override { AddFirst(obj); }
void AddLast(TObject *obj) override;
void AddLast(TObject *obj, Option_t *) override { AddLast(obj); }
void AddAt(TObject *obj, Int_t idx) override;
void AddAt(TObject *obj, Int_t idx, Option_t *) override { AddAt(obj, idx); }
virtual void AddAtAndExpand(TObject *obj, Int_t idx);
virtual Int_t AddAtFree(TObject *obj);
void AddAfter(const TObject *after, TObject *obj) override;
void AddAfter(const TObject *after, TObject *obj, Option_t *) override { AddAfter(after, obj); }
void AddBefore(const TObject *before, TObject *obj) override;
void AddBefore(const TObject *before, TObject *obj, Option_t *) override { AddBefore(before, obj); }
TObject *RemoveAt(Int_t idx) override;
TObject *Remove(TObject *obj) override;

Expand Down
6 changes: 6 additions & 0 deletions core/cont/inc/TSeqCollection.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,17 @@ class TSeqCollection : public TCollection {
public:
virtual ~TSeqCollection() { }
void Add(TObject *obj) override { AddLast(obj); }
void Add(TObject *obj, Option_t *opt) override { AddLast(obj, opt); }
virtual void AddFirst(TObject *obj) = 0;
virtual void AddFirst(TObject */*obj*/, Option_t */*opt*/) { AbstractMethod("AddFirst"); }; // not = 0, to not break user scripts
virtual void AddLast(TObject *obj) = 0;
virtual void AddLast(TObject */*obj*/, Option_t */*opt*/) { AbstractMethod("AddLast"); }; // not = 0, to not break user scripts
virtual void AddAt(TObject *obj, Int_t idx) = 0;
virtual void AddAt(TObject */*obj*/, Int_t /*idx*/, Option_t */*opt*/) { AbstractMethod("AddAt"); }; // not = 0, to not break user scripts
virtual void AddAfter(const TObject *after, TObject *obj) = 0;
virtual void AddAfter(const TObject */*after*/, TObject */*obj*/, Option_t */*opt*/) { AbstractMethod("AddAfter"); }; // not = 0, to not break user scripts
virtual void AddBefore(const TObject *before, TObject *obj) = 0;
virtual void AddBefore(const TObject */*before*/, TObject */*obj*/, Option_t */*opt*/) { AbstractMethod("AddABefore"); }; // not = 0, to not break user scripts
virtual void RemoveFirst() { Remove(First()); }
virtual void RemoveLast() { Remove(Last()); }
virtual TObject *RemoveAt(Int_t idx) { return Remove(At(idx)); }
Expand Down
5 changes: 5 additions & 0 deletions core/cont/inc/TSortedList.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,15 @@ class TSortedList : public TList {
void AddLast(TObject *obj) override { Add(obj); }
void AddLast(TObject *obj, Option_t *opt) override { Add(obj, opt); }
void AddAt(TObject *obj, Int_t) override { Add(obj); }
void AddAt(TObject *obj, Int_t, Option_t* opt) override { Add(obj, opt); }
void AddAfter(const TObject *, TObject *obj) override { Add(obj); }
void AddAfter(TObjLink *, TObject *obj) override { Add(obj); }
void AddAfter(const TObject *, TObject *obj, Option_t *opt) override { Add(obj, opt); }
void AddAfter(TObjLink *, TObject *obj, Option_t *opt) override { Add(obj, opt); }
void AddBefore(const TObject *, TObject *obj) override { Add(obj); }
void AddBefore(TObjLink *, TObject *obj) override { Add(obj); }
void AddBefore(const TObject *, TObject *obj, Option_t *opt) override { Add(obj, opt); }
void AddBefore(TObjLink *, TObject *obj, Option_t *opt) override { Add(obj, opt); }
void Sort(Bool_t = kSortAscending) override { }

ClassDefOverride(TSortedList,0) //A sorted list
Expand Down
54 changes: 54 additions & 0 deletions core/cont/src/THashList.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,28 @@ void THashList::AddBefore(TObjLink *before, TObject *obj)
fTable->AddBefore(before->GetObject(), obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object before object before in the list, with options.

void THashList::AddBefore(const TObject *before, TObject *obj, Option_t *opt)
{
R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);

TList::AddBefore(before, obj, opt);
fTable->AddBefore(before, obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object before object before in the list, with options.

void THashList::AddBefore(TObjLink *before, TObject *obj, Option_t *opt)
{
R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);

TList::AddBefore(before, obj, opt);
fTable->AddBefore(before->GetObject(), obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object after object after in the list.

Expand All @@ -158,6 +180,27 @@ void THashList::AddAfter(TObjLink *after, TObject *obj)
TList::AddAfter(after, obj);
fTable->Add(obj);
}
////////////////////////////////////////////////////////////////////////////////
/// Insert object after object after in the list, with options.

void THashList::AddAfter(const TObject *after, TObject *obj, Option_t *opt)
{
R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);

TList::AddAfter(after, obj, opt);
fTable->Add(obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object after object after in the list, with options.

void THashList::AddAfter(TObjLink *after, TObject *obj, Option_t *opt)
{
R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);

TList::AddAfter(after, obj, opt);
fTable->Add(obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object at location idx in the list.
Expand All @@ -170,6 +213,17 @@ void THashList::AddAt(TObject *obj, Int_t idx)
fTable->Add(obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Insert object at location idx in the list, with options.

void THashList::AddAt(TObject *obj, Int_t idx, Option_t *opt)
{
R__COLLECTION_WRITE_LOCKGUARD(ROOT::gCoreMutex);

TList::AddAt(obj, idx, opt);
fTable->Add(obj);
}

////////////////////////////////////////////////////////////////////////////////
/// Return the average collision rate. The higher the number the longer
/// the linked lists in the hashtable, the slower the lookup. If the number
Expand Down
Loading
Loading