From b77f275b4609400c099411e19f5ecae08c93823b Mon Sep 17 00:00:00 2001 From: Rene Brun <Rene.Brun@cern.ch> Date: Thu, 5 Dec 2002 10:26:25 +0000 Subject: [PATCH] Reintroduce the original version of tcollex with the inline class TObjNum git-svn-id: http://root.cern.ch/svn/root/trunk@5747 27541ba8-7e3a-0410-8455-c3a389f83636 --- test/tcollex.cxx | 106 ++++++++++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 43 deletions(-) diff --git a/test/tcollex.cxx b/test/tcollex.cxx index db387ee0faf..3c5d1d4a147 100644 --- a/test/tcollex.cxx +++ b/test/tcollex.cxx @@ -12,16 +12,36 @@ #include "THashTable.h" #include "TBtree.h" #include "TStopwatch.h" -#include "TObjNum.h" // To focus on basic collection protocol, this sample program uses // simple classes inheriting from TObject. One class, TObjString, is a // collectable string class (a TString wrapped in a TObject) provided -// by the ROOT system. The other class TObjNumI, is an integer wrapped -// in a TObject, just like TObjString. - - +// by the ROOT system. The other class we define below, is an integer +// wrapped in a TObject, just like TObjString. + + +// TObjNum is a simple container for an integer. +class TObjNum : public TObject { +private: + int num; + +public: + TObjNum(int i = 0) : num(i) { } + ~TObjNum() { Printf("~TObjNum = %d", num); } + void SetNum(int i) { num = i; } + int GetNum() { return num; } + void Print(Option_t *) const { Printf("TObjNum = %d", num); } + ULong_t Hash() const { return num; } + Bool_t IsEqual(const TObject *obj) const { return num == ((TObjNum*)obj)->num; } + Bool_t IsSortable() const { return kTRUE; } + Int_t Compare(const TObject *obj) const { if (num > ((TObjNum*)obj)->num) + return 1; + else if (num < ((TObjNum*)obj)->num) + return -1; + else + return 0; } +}; void Test_TObjArray() { @@ -36,17 +56,17 @@ void Test_TObjArray() TObjArray a(10); Printf("Filling TObjArray"); - a.Add(new TObjNumI(1)); // add at next free slot, pos 0 - a[1] = new TObjNumI(2); // use operator[], put at pos 1 - TObjNumI *n3 = new TObjNumI(3); + a.Add(new TObjNum(1)); // add at next free slot, pos 0 + a[1] = new TObjNum(2); // use operator[], put at pos 1 + TObjNum *n3 = new TObjNum(3); a.AddAt(n3,2); // add at position 2 - a.Add(new TObjNumI(4)); // add at next free slot, pos 3 - a.AddLast(new TObjNumI(10)); // add at pos 4 - TObjNumI n6(6); // stack based TObjNumI + a.Add(new TObjNum(4)); // add at next free slot, pos 3 + a.AddLast(new TObjNum(10)); // add at pos 4 + TObjNum n6(6); // stack based TObjNum a.AddAt(&n6,5); // add at pos 5 - a[6] = new TObjNumI(5); // add at respective positions - a[7] = new TObjNumI(8); - a[8] = new TObjNumI(7); + a[6] = new TObjNum(5); // add at respective positions + a[7] = new TObjNum(8); + a[8] = new TObjNum(7); // a[10] = &n6; // gives out-of-bound error Printf("Print array"); @@ -80,8 +100,8 @@ void Test_TObjArray() // used depends on the type of the collection. TIter next(&a); - TObjNumI *obj; - while ((obj = (TObjNumI*)next())) // iterator skips empty slots + TObjNum *obj; + while ((obj = (TObjNum*)next())) // iterator skips empty slots if (obj->GetNum() == 4) { a.Remove(obj); delete obj; @@ -89,7 +109,7 @@ void Test_TObjArray() // Reset the iterator and loop again next.Reset(); - while ((obj = (TObjNumI*)next())) + while ((obj = (TObjNum*)next())) if (obj->GetNum() == 7) { a.Remove(obj); delete obj; @@ -97,7 +117,7 @@ void Test_TObjArray() Printf("Iterate backward over list and remove 2"); TIter next1(&a, kIterBackward); - while ((obj = (TObjNumI*)next1())) + while ((obj = (TObjNum*)next1())) if (obj->GetNum() == 2) { a.Remove(obj); delete obj; @@ -193,13 +213,13 @@ void Test_TList() TList l; Printf("Filling TList"); - TObjNumI *n3 = new TObjNumI(3); + TObjNum *n3 = new TObjNum(3); l.Add(n3); - l.AddBefore(n3, new TObjNumI(5)); - l.AddAfter(n3, new TObjNumI(2)); - l.Add(new TObjNumI(1)); - l.AddBefore(n3, new TObjNumI(4)); - TObjNumI n6(6); // stack based TObjNumI + l.AddBefore(n3, new TObjNum(5)); + l.AddAfter(n3, new TObjNum(2)); + l.Add(new TObjNum(1)); + l.AddBefore(n3, new TObjNum(4)); + TObjNum n6(6); // stack based TObjNum l.AddFirst(&n6); Printf("Print list"); @@ -211,14 +231,14 @@ void Test_TList() l.Print(); Printf("Iterate forward over list and remove 4"); - TObjNumI *obj; + TObjNum *obj; TIter next(&l); - while ((obj = (TObjNumI*)next())) + while ((obj = (TObjNum*)next())) if (obj->GetNum() == 4) l.Remove(obj); Printf("Iterate backward over list and remove 2"); TIter next1(&l, kIterBackward); - while ((obj = (TObjNumI*)next1())) + while ((obj = (TObjNum*)next1())) if (obj->GetNum() == 2) { l.Remove(obj); delete obj; @@ -242,13 +262,13 @@ void Test_TSortedList() TSortedList sl; Printf("Filling TSortedList"); - TObjNumI *n3 = new TObjNumI(3); + TObjNum *n3 = new TObjNum(3); sl.Add(n3); - sl.AddBefore(n3,new TObjNumI(5)); - sl.AddAfter(n3, new TObjNumI(2)); - sl.Add(new TObjNumI(1)); - sl.AddBefore(n3, new TObjNumI(4)); - TObjNumI n6(6); // stack based TObjNumI + sl.AddBefore(n3,new TObjNum(5)); + sl.AddAfter(n3, new TObjNum(2)); + sl.Add(new TObjNum(1)); + sl.AddBefore(n3, new TObjNum(4)); + TObjNum n6(6); // stack based TObjNum sl.AddFirst(&n6); Printf("Print list"); @@ -317,18 +337,18 @@ void Test_TBtree() Printf("Filling TBtree"); - TObjNumI *n3 = new TObjNumI(3); + TObjNum *n3 = new TObjNum(3); l.Add(n3); - l.AddBefore(n3,new TObjNumI(5)); - l.AddAfter(n3, new TObjNumI(2)); - l.Add(new TObjNumI(1)); - l.AddBefore(n3, new TObjNumI(4)); - TObjNumI n6(6); // stack based TObjNumI + l.AddBefore(n3,new TObjNum(5)); + l.AddAfter(n3, new TObjNum(2)); + l.Add(new TObjNum(1)); + l.AddBefore(n3, new TObjNum(4)); + TObjNum n6(6); // stack based TObjNum l.AddFirst(&n6); timer.Start(); for (int i = 0; i < 50; i++) - l.Add(new TObjNumI(i)); + l.Add(new TObjNum(i)); timer.Print(); Printf("Print TBtree"); @@ -340,13 +360,13 @@ void Test_TBtree() Printf("Iterate forward over TBtree and remove 4 from tree"); TIter next(&l); - TObjNumI *obj; - while ((obj = (TObjNumI*)next())) + TObjNum *obj; + while ((obj = (TObjNum*)next())) if (obj->GetNum() == 4) l.Remove(obj); Printf("Iterate backward over TBtree and remove 2 from tree"); TIter next1(&l, kIterBackward); - while ((obj = (TObjNumI*)next1())) + while ((obj = (TObjNum*)next1())) if (obj->GetNum() == 2) l.Remove(obj); Printf("\nDelete all heap based objects"); -- GitLab