Hi Rooters!
I wonder about the behaviour of TObjArray::Remove(TObject* obj):
1.
As it uses TObjArray::IndexOf(obj) it does not remove objects with address
equal to obj, but the first object that answers kTRUE on IsEqual(obj). But
this is what I expect from a method 'Remove' with a pointer as argument.
At least the html documentation should mention that!
A macro showing the removal of the - for my expectation - wrong object
canbe found at the end.
2.
One may also expect that all objects equal to 'obj' are removed from the
array, not only the first that matches. Here I admit that this is a
matter of taste, but at least it should be documented in html.
Cheers
Gero Flucke
PS: (ROOT 3.04_02 on desy-linux4 (suse based))
PSS: Here comes the macro
#include "TNamed.h"
#include "TObjArray.h"
#include <iostream>
class MyNamed : public TNamed{
public:
MyNamed(const char* name) : TNamed(name, name){}
virtual Bool_t IsEqual(const TObject* obj) const{
return (obj && fName == TString(obj->GetName()));
}
virtual void Print(Option_t* opt) const{
this->TNamed::Print();
cout << this << endl;
}
ClassDef(MyNamed,1)
};
void macro()
{
MyNamed* mn1 = new MyNamed("nam1");
cout << mn1 << endl;
MyNamed* mn2 = new MyNamed("nam2");
cout << mn2 << endl;
MyNamed* mn3 = new MyNamed("nam1"); // again name as mn1
cout << mn3 << endl;
TObjArray* arr = new TObjArray;
arr->Add(mn3);
arr->Add(mn1);
arr->Add(mn2);
arr->Print();
cout << "\n Now removing " << mn1 << "..." << endl;
arr->Remove(mn1);
arr->Print();
}
giving :
root [0] .x macro.C++
Info in <TUnixSystem::ACLiC>: creating shared library
/afs/desy.de/user/f/flucke/h1/oo/calib/GFCalib/./macro_C.so
0x88d4868
0x88d6370
0x88d63c0
OBJ: MyNamed nam1 nam1
0x88d63c0
OBJ: MyNamed nam1 nam1
0x88d4868
OBJ: MyNamed nam2 nam2
0x88d6370
Now removing 0x88d4868...
OBJ: MyNamed nam1 nam1
0x88d4868
OBJ: MyNamed nam2 nam2
0x88d6370
-----------------------------------------------------------------------
Gero Flucke
1a / 603
DESY
Notkestr. 85
22607 Hamburg
+49-(0)40-8998-2454
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET