64 Chunk(
const Chunk&) =
delete;
70 Int_t capacity()
const
79 bool full()
const {
return !
free(); }
81 bool empty()
const {
return capacity() ==
free(); }
120 typedef RooLinkedListImplDetails::Chunk Chunk;
122 typedef std::map<const void*, Chunk*>
AddrMap;
129 inline void acquire() { ++_refCount; }
131 inline bool release() {
return 0 == --_refCount; }
167 Chunk *
c =
new Chunk(
sz);
202 Chunk *
c =
ci->second;
204 c->push_free_elem(
el);
229 Int_t Pool::nextChunkSz()
const
264 _hashThresh(
htsize), _size(0), _first(nullptr), _last(nullptr), _htableName(nullptr), _htableLink(nullptr), _useNptr(
true)
274 TObject(
other), _hashThresh(
other._hashThresh), _size(0), _first(nullptr), _last(nullptr), _htableName(nullptr), _htableLink(nullptr),
276 _useNptr(
other._useNptr)
331 coutE(InputArguments) <<
"RooLinkedList::setHashTable() ERROR size must be positive" << std::endl ;
371 if (
_pool->release()) {
390 if (ptr->
_arg == arg) {
543 return elem ?
elem->_arg : nullptr ;
637 if (!
nptr)
return nullptr;
692 if (ptr->
_arg==arg)
return idx ;
723 std::cout <<
elem->_arg <<
" : " ;
724 elem->_arg->Print(opt) ;
735 auto iterImpl = std::make_unique<RooLinkedListIterImpl>(
this, forward);
745 auto iterImpl = std::make_unique<RooLinkedListIterImpl>(
this, forward);
754 auto iterImpl = std::make_unique<RooFIterForLinkedList>(
this);
763 return {
this,
nullptr,
true};
767 return {
this,
false};
771 return {
this,
nullptr,
false};
783 for (
auto it =
_at.begin(); it !=
_at.end(); ++it,
elem =
elem->_next) {
791template <
bool ascending>
797 if (tail) *tail =
l1;
802 std::vector<RooLinkedListElem *>
arr(
sz,
nullptr);
803 for (
int i = 0;
l1;
l1 =
l1->_next, ++i)
arr[i] =
l1;
812 (tmp->_arg->Compare(
arr[
j]->_arg) <= 0) :
813 (
arr[
j]->_arg->Compare(tmp->_arg) <= 0);
820 }
while (
int(
sz) != i);
823 arr[0]->_prev =
arr[
sz - 1]->_next =
nullptr;
824 for (
int i = 0; i <
int(
sz - 1); ++i) {
825 arr[i]->_next =
arr[i + 1];
826 arr[i + 1]->_prev =
arr[i];
828 if (tail) *tail =
arr[
sz - 1];
836 if (!
end->_next)
break;
839 l2->_prev->_next =
nullptr;
847 (
l2->_arg->Compare(
l1->_arg) <= 0)) ?
l1 :
l2;
857 (
l2->_arg->Compare(
l1->_arg) <= 0);
861 l1->_prev->_next =
l2;
862 l2->_prev =
l1->_prev;
902 if (
R__b.IsReading()) {
917 if (
v > 1 &&
v < 4) {
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Binding & operator=(OUT(*fun)(void))
const_iterator begin() const
const_iterator end() const
Common abstract base class for objects that represent a value and a "shape" in RooFit.
const TNamed * namePtr() const
De-duplicated pointer to this object's name.
Abstract base class for binned and unbinned datasets.
const TNamed * namePtr() const
De-duplicated pointer to this object's name.
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
Link element for the RooLinkedList class.
TObject * _arg
Link to contents.
Int_t _refCount
! Reference count
RooLinkedListElem * _next
Link to next element in list.
Implementation of the actual iterator on RooLinkedLists.
A wrapper around TIterator derivatives.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
RooLinkedListIterImpl rend() const
TObject * At(int index) const
Return object stored in sequential position given by index.
RooLinkedListIter iterator(bool forward=true) const
Create an iterator for this list.
static Pool * _pool
shared memory pool for allocation of RooLinkedListElems
~RooLinkedList() override
Destructor.
RooLinkedListIterImpl end() const
RooLinkedListImplDetails::Pool Pool
memory pool for quick allocation of RooLinkedListElems
std::vector< RooLinkedListElem * > _at
! index list for quick index through At
std::unique_ptr< HashTableByName > _htableName
! Hash table by name
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
bool Replace(const TObject *oldArg, const TObject *newArg)
Replace object 'oldArg' in collection with new object 'newArg'.
RooLinkedList(Int_t htsize=0)
void Print(const char *opt) const override
Print contents of list, defers to Print() function of contained objects.
std::unique_ptr< HashTableByLink > _htableLink
! Hash table by link pointer
RooFIter fwdIterator() const
Create a one-time-use forward iterator for this list.
void deleteElement(RooLinkedListElem *)
RooLinkedListElem * findLink(const TObject *arg) const
Find the element link containing the given object.
void Streamer(TBuffer &) override
Custom streaming handling schema evolution w.r.t past implementations.
RooLinkedListIterImpl rbegin() const
TClass * IsA() const override
Int_t _hashThresh
Size threshold for hashing.
RooLinkedListElem * createElement(TObject *obj, RooLinkedListElem *elem=nullptr)
std::cout << "RooLinkedList::createElem(" << this << ") obj = " << obj << " elem = " << elem << std::...
RooAbsArg * findArg(const RooAbsArg *) const
Return pointer to object with given name in collection.
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
TObject * find(const char *name) const
Return pointer to object with given name in collection.
RooLinkedList & operator=(const RooLinkedList &other)
Assignment operator, copy contents from 'other'.
virtual void Add(TObject *arg)
Int_t _size
Current size of list.
RooLinkedListIterImpl begin() const
RooLinkedListElem * _last
! Link to last element of list
void setHashTableSize(Int_t size)
Change the threshold for hash-table use to given size.
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
RooLinkedListElem * _first
! Link to first element of list
TIterator * MakeIterator(bool forward=true) const
Create a TIterator for this list.
void Clear(Option_t *o=nullptr) override
Remove all elements from collection.
static RooLinkedListElem * mergesort_impl(RooLinkedListElem *l1, const unsigned sz, RooLinkedListElem **tail=nullptr)
length 0, 1 lists are sorted
void Sort(bool ascend=true)
Int_t IndexOf(const char *name) const
Return position of given object in list.
virtual bool Remove(TObject *arg)
Remove object from collection.
static const TNamed * known(const char *stringPtr)
If the name is already known, return its TNamed pointer. Otherwise return 0 (don't register the name)...
@ kRenamedArg
TNamed flag to indicate that some RooAbsArg has been renamed (flag set in new name)
Buffer base class used for serializing objects.
Iterator abstract base class.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
void CallRecursiveRemoveIfNeeded(TObject &obj)
call RecursiveRemove for obj if gROOT is valid and obj.TestBit(kMustCleanup) is true.