Hi Gero,
I'll make the comments more explicit.
To remove all occurrences of the same object call
TCollection::RecursiveRemove().
Cheers, Fons.
On Mon, 2003-10-13 at 16:28, Gero Flucke wrote:
> 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
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://www.rademakers.org/fons/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET