RE: [ROOT] TList Unique entry

From: Valeri Fine (fine@bnl.gov)
Date: Thu Jun 05 2003 - 21:44:49 MEST


It sounds he wants the STL-like "set" container.

                     Valeri

> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]
> On Behalf Of Rene Brun
> Sent: Thursday, June 05, 2003 3:31 PM
> To: Jean-Eric Campagne
> Cc: Fons Rademakers; roottalk@pcroot.cern.ch
> Subject: Re: [ROOT] TList Unique entry
> 
> Hi Jean-Eric,
> 
> I have some difficulty understanding what you want to do,
> but your solution will be VERY VERY innefficient.
> You should simply do:
>   if (!list->FindObject(obj)) list->Add(obj);
> 
> Rene Brun
> 
> On Thu, 5 Jun
> 2003, Jean-Eric Campagne wrote:
> 
> > Hi Fons,
> >
> > What do you think of the following routine...
> >
> > Chers. Jean-Eric
> >
> >
//----------------------------------------------------------------------
> ---
> > ---/
> > #include <set>
> >  typedef std::set<void*> AddressBook;
> >
> >
> > void SecureDelete(TList* aList) {
> >   AddressBook uniqueInstanceSet; //Address Container with unique
> instance
> >   pair<AddressBook::iterator,bool> rc;
> >
> >   TIter next(aList);
> >   TObject* aObj;
> >   //referencer les addresses dans un set (une entree par adresse
> differente)
> >   while ( (aObj = next()) ) {
> >     rc = uniqueInstanceSet.insert((void*)aObj);
> >     if (rc.second) {// the objet has not been referenced so it can
be
> > deleted
> >       delete aObj;
> >     }
> >   }//eow
> >   //Use Clear with nodelete option to reset the List wo deletion of
the
> > objects
> >   //as they have been deleted in previous while loop.
> >   aList->Clear("nodelete");
> > }
> >
> > --On mercredi 4 juin 2003 21:33 +0200 Fons Rademakers
> > <Fons.Rademakers@cern.ch> wrote:
> >
> > > Hi Jean-Eric,
> > >
> > >   this cannot be done automatically, you have to make some add
method
> > > that first looks if the object is already in the list (like
> > > list->FindObject(newObj)) and only add the method if FindObject()
> > > returns 0.
> > >
> > > Cheers, Fons.
> > >
> > >
> > > On Wed, 2003-06-04 at 16:05, Jean-Eric Campagne wrote:
> > >> Hello,
> > >>
> > >> If I make add twice  the same instance of an object in a TList,
then
> at
> > >> the  Delete phase of the TList there is a crash for known reason.
> > >> How, I can ask the TList to keep Unique Instance of an Object?
> > >>
> > >> Regards
> > >> Jean-Eric Campagne
> > >>
> > >>
>
........................................................................
> > >> ... .LAL - IN2P3 - CNRS
> > >> .LAL - B.P 34 - 91898 Orsay Cedex - France
> > >> .Piece 108
> > >> .Tel +33 (0)1 64 46 84 29
> > >> .Fax +33 (0)1 64 46 83 97
> > >>
>
........................................................................
> > >> ...
> > > --
> > > Org:    CERN, European Laboratory for Particle Physics.
> > > Mail:   1211 Geneve 23, Switzerland
> > > E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
> > > WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7679480
> > >
> >
> >
> >
> >
>
........................................................................
..
> .
> > .LAL - IN2P3 - CNRS
> > .LAL - B.P 34 - 91898 Orsay Cedex - France
> > .Piece 108
> > .Tel +33 (0)1 64 46 84 29
> > .Fax +33 (0)1 64 46 83 97
> >
>
........................................................................
..
> .
> >
> >



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET