204 Error(
"Add",
"object must be sortable");
286 Error(
"FindObject",
"object must be sortable");
305 Error(
"IdxAdd",
"object must be sortable");
347 Warning(
"Init",
"order must be at least 3");
396 Error(
"Rank",
"object must be sortable");
411 Error(
"Remove",
"object must be sortable");
464 b.ReadVersion(&R__s, &R__c);
482 b.SetByteCount(R__c,
kTRUE);
555 fTree =
p->GetParentTree();
578 : fTree(t), fCurCursor(0), fCursor(0), fDirection(dir)
643 if (fCursor < fTree->GetSize())
677 return (((
fCurCursor >= 0) && (fCurCursor < fTree->GetSize())) ?
693 ::Fatal(
"TBtInnerNode::TBtInnerNode",
"no more memory");
705 ::Fatal(
"TBtInnerNode::TBtInnerNode",
"no more memory");
784 for (
Int_t i = start; i <= stop; i++)
818 PushLeft(noFromThis, leftsib, pidx);
894 for (
Int_t i = 0; i <
l; i++)
987 Int_t hasLeftSib = (leafidx > 0) &&
995 }
else if (hasLeftSib) {
1002 }
else if (hasRightSib) {
1005 }
else if (leftSibFull) {
1008 }
else if (hasLeftSib) {
1023 Int_t hasLeftSib = (inneridx > 0) &&
1030 }
else if (hasLeftSib) {
1036 }
else if (hasRightSib) {
1038 }
else if (leftSibFull) {
1040 }
else if (hasLeftSib) {
1066 Int_t hasLeftSib = (leafidx > 0) &&
1076 }
else if (hasLeftSib) {
1079 }
else if (hasRightSib) {
1092 Int_t hasLeftSib = (inneridx > 0) &&
1100 }
else if (hasLeftSib) {
1102 }
else if (hasRightSib) {
1124 if (rightsib->
Psize() > 0)
1155 ::Error(
"TBtInnerNode::operator[]",
"should not happen, 0 returned");
1162 ::Error(
"TBtInnerNode::operator[]",
"should not happen, 0 returned");
1200 tgt = rightsib->
fLast + noFromThis;
1202 rightsib->
fLast = tgt;
1223 fLast -= noFromThis;
1322 Int_t newSizeThis = nofKeys / 3;
1323 Int_t newSizeNew = (nofKeys - newSizeThis) / 2;
1324 Int_t newSizeSib = (nofKeys - newSizeThis - newSizeNew);
1326 Int_t noFromSib = rightsib->
Vsize() - newSizeSib;
1335 if (noFromThis > 0) {
1339 this->
PushRight(noFromThis-1, newNode, keyidx);
1340 rightsib->
PushLeft(noFromSib, newNode, keyidx+1);
1347 rightsib->
PushLeft(noFromSib-1, newNode, keyidx+1);
1433 for (
Int_t i = start; i <= stop; i++)
1457 PushLeft(noFromThis, leftsib, pidx);
1536 if (
fItem[i] == that)
1628 tgt = rightsib->
fLast + noFromThis;
1630 rightsib->
fLast = tgt;
1646 fLast -= noFromThis;
1711 Int_t newSizeThis = nofKeys / 3;
1712 Int_t newSizeNew = (nofKeys - newSizeThis) / 2;
1713 Int_t newSizeSib = (nofKeys - newSizeThis - newSizeNew);
1715 Int_t noFromSib = rightsib->
Vsize() - newSizeSib;
1723 this->
PushRight(noFromThis-1, newNode, keyidx);
1724 rightsib->
PushLeft(noFromSib, newNode, keyidx+1);
const Bool_t kIterForward
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
Int_t Compare(const void *item1, const void *item2)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
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
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Int_t DecNofKeys(Int_t i, Int_t n=1)
void InformParent()
Tell the parent that we are full.
void ShiftLeft(Int_t cnt)
Shift to the left.
Int_t NofKeys() const override
Number of key.
void BalanceWithLeft(TBtInnerNode *l, Int_t idx)
THIS has more than LEFTSIB.
Int_t IncNofKeys(Int_t i, Int_t n=1)
void BalanceWithRight(TBtInnerNode *r, Int_t idx)
THIS has more than RIGHTSIB.
Int_t FindRankUp(const TBtNode *n) const
FindRankUp is FindRank in reverse.
void AppendFrom(TBtInnerNode *src, Int_t start, Int_t stop)
This should never create a full node that is, it is not used anywhere where THIS could possibly be ne...
void Append(TObject *obj, TBtNode *n)
Never called from anywhere where it might fill up THIS.
TBtItem & GetItem(Int_t i) const
void SetKey(Int_t i, TObject *obj)
Int_t GetNofKeys(Int_t i) const
void AddElt(TBtItem &itm, Int_t at)
Add one element.
Int_t IndexOf(const TBtNode *n) const
Returns a number in the range 0 to this->fLast 0 is returned if THAT == fTree[0].
Int_t FindRank(const TObject *obj) const override
Recursively look for WHAT starting in the current node.
void Add(const TObject *obj, Int_t idx) override
This is called only from TBtree::Add().
void MergeWithRight(TBtInnerNode *r, Int_t idx)
Merge the 2 part of the tree.
Int_t IsAlmostFull() const
void SetItem(Int_t i, TBtItem &itm)
void SetNofKeys(Int_t i, Int_t r)
void SetTree(Int_t i, TBtNode *node)
void PushLeft(Int_t cnt, TBtInnerNode *leftsib, Int_t parentIdx)
noFromThis==1 => moves the parent item into the leftsib, and the first item in this's array into the ...
void IncrNofKeys(TBtNode *np)
THAT is a child of THIS that has just grown by 1.
TObject * GetKey(Int_t i) const
void DecrNofKeys(TBtNode *np)
THAT is a child of THIS that has just shrunk by 1.
void Remove(Int_t idx) override
Remove an element.
~TBtInnerNode()
Constructor.
void BalanceWith(TBtInnerNode *n, int idx)
PINDX is the index of the parent item whose key will change when keys are shifted from one InnerNode ...
void Split() override
This function is called only when THIS is the only descendent of the root node, and THIS needs to be ...
void PushRight(Int_t cnt, TBtInnerNode *rightsib, Int_t parentIdx)
The operation is three steps:
TObject * operator[](Int_t i) const override
return an element.
TBtNode * GetTree(Int_t i) const
void SplitWith(TBtInnerNode *r, Int_t idx)
THIS and SIB are too full; create a NEWNODE, and balance the number of keys between the three of them...
void RemoveItem(Int_t idx)
Remove an item.
TBtLeafNode * FirstLeafNode() override
Return the first leaf node.
Int_t NofKeys(Int_t idx) const
TObject * Found(const TObject *obj, TBtNode **which, Int_t *where) override
Recursively look for WHAT starting in the current node.
TBtLeafNode * LastLeafNode() override
Return the last leaf node.
Item stored in inner nodes of a TBtree.
~TBtItem()
Delete a tree item.
void BalanceWith(TBtLeafNode *n, Int_t idx)
PITEM is the parent item whose key will change when keys are shifted from one LeafNode to the other.
void BalanceWithRight(TBtLeafNode *r, Int_t idx)
THIS has more than RIGHTSIB; move some items from THIS to RIGHTSIB.
void Split() override
This function is called only when THIS is the only descendent of the root node, and THIS needs to be ...
Int_t IsAlmostFull() const
void RemoveItem(Int_t idx)
void ShiftLeft(Int_t cnt)
Shift.
void PushRight(Int_t cnt, TBtLeafNode *r, Int_t parentIndex)
noFromThis==1 => moves the parent item into the rightsib, and the last item in this's array into the ...
void SplitWith(TBtLeafNode *r, Int_t idx)
Split.
TObject * Found(const TObject *obj, TBtNode **which, Int_t *where) override
WHAT was not in any inner node; it is either here, or it's not in the tree.
TBtLeafNode * FirstLeafNode() override
Return the first node.
void Remove(Int_t idx) override
Remove an element.
void BalanceWithLeft(TBtLeafNode *l, Int_t idx)
THIS has more than LEFTSIB; move some items from THIS to LEFTSIB.
void PushLeft(Int_t cnt, TBtLeafNode *l, Int_t parentIndex)
noFromThis==1 => moves the parent item into the leftsib, and the first item in this's array into the ...
void Add(const TObject *obj, Int_t idx) override
Add the object OBJ to the leaf node, inserting it at location INDEX in the fItem array.
void MergeWithRight(TBtLeafNode *r, Int_t idx)
Merge.
~TBtLeafNode()
Destructor.
Int_t NofKeys() const override
Return the number of keys.
Int_t NofKeys(Int_t i) const
Return the number of keys.
TBtLeafNode * LastLeafNode() override
return the last node.
void Append(TObject *obj)
Never called from anywhere where it might fill up THIS does NOT handle nofKeys.
Int_t FindRank(const TObject *obj) const override
WHAT was not in any inner node; it is either here, or it's not in the tree.
Int_t IndexOf(const TObject *obj) const
Returns a number in the range 0 to MaxIndex().
void AppendFrom(TBtLeafNode *src, Int_t start, Int_t stop)
A convenience function, does not worry about the element in the parent, simply moves elements from SR...
Abstract base class (ABC) of a TBtree node.
virtual void Add(const TObject *obj, Int_t index)=0
virtual TBtLeafNode * LastLeafNode()=0
virtual Int_t FindRank(const TObject *obj) const =0
virtual ~TBtNode()
Delete a B-tree node.
virtual Int_t NofKeys() const =0
TBtNode(Int_t isleaf, TBtInnerNode *p, TBtree *t=nullptr)
Create a B-tree node.
friend class TBtInnerNode
virtual void Remove(Int_t index)=0
virtual TBtLeafNode * FirstLeafNode()=0
virtual TObject * Found(const TObject *obj, TBtNode **which, Int_t *where)=0
Bool_t operator!=(const TIterator &aIter) const override
This operator compares two TIterator objects.
TIterator & operator=(const TIterator &rhs) override
Overridden assignment operator.
TObject * Next() override
Get next object from B-tree. Returns 0 when no more objects in tree.
void Reset() override
Reset the B-tree iterator.
TObject * operator*() const override
Return current object or nullptr.
Int_t IdxAdd(const TObject &obj)
Add object and return its index in the tree.
Int_t Rank(const TObject *obj) const
Returns the rank of the object in the tree.
TClass * IsA() const override
void Delete(Option_t *option="") override
Remove all objects from B-tree AND delete all heap based objects.
virtual ~TBtree()
Delete B-tree.
void Init(Int_t i)
Initialize a B-tree.
TObject * Before(const TObject *obj) const override
May not use this method since B-tree decides order.
friend class TBtInnerNode
TObject * Remove(TObject *obj) override
Remove an object from the tree.
void RootIsFull()
The root of the tree is full.
TBtree(Int_t ordern=3)
Create a B-tree of certain order (by default 3).
void Add(TObject *obj) override
Add object to B-tree.
void Clear(Option_t *option="") override
Remove all objects from B-tree.
void Streamer(TBuffer &) override
Stream all objects in the btree to or from the I/O buffer.
TObject * After(const TObject *obj) const override
Cannot use this method since B-tree decides order.
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Returns a B-tree iterator.
void RootIsEmpty()
If root is empty clean up its space.
TObject * At(Int_t idx) const override
TObject * FindObject(const char *name) const override
Find object using its name (see object's GetName()).
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.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
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.
virtual TClass * IsA() const
Mother of all ROOT objects.
virtual Bool_t IsSortable() const
R__ALWAYS_INLINE Bool_t IsOnHeap() const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void MayNotUse(const char *method) const
Use this method to signal that a method (defined in a base class) may not be called in a derived clas...
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void Streamer(TBuffer &) override
Stream all objects in the collection to or from the I/O buffer.
static uint64_t sum(uint64_t i)