Skip to content
Snippets Groups Projects
Commit b77f275b authored by Rene Brun's avatar Rene Brun
Browse files

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
parent 313b1861
No related branches found
No related tags found
No related merge requests found
......@@ -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");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment