[ROOT] TObjArray::Remove

From: Gero Flucke (gero.flucke@desy.de)
Date: Mon Oct 13 2003 - 16:28:41 MEST


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