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