TDataSetIter.h

Go to the documentation of this file.
00001 // @(#)root/table:$Id: TDataSetIter.h 21571 2008-01-03 09:21:42Z brun $
00002 // Author: Valery Fine(fine@mail.cern.ch)   03/07/98
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TDataSetIter
00013 #define ROOT_TDataSetIter
00014 
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 //                                                                      //
00019 // TDataSetIter                                                         //
00020 //                                                                      //
00021 // Iterator of TDataSet lists.                                          //
00022 //                                                                      //
00023 // Provides "standard" features of the TIter class for TDataSet object  //
00024 //                             and                                      //
00025 // allows navigating TDataSet structure using the custom "directory"    //
00026 //    notation (see TDataSet::Find(const Char *path) method)            //
00027 //                                                                      //
00028 //////////////////////////////////////////////////////////////////////////
00029 
00030 #include "TList.h"
00031 #include "TNamed.h"
00032 
00033 #include "TDataSet.h"
00034 
00035 class TDataSetIter : public TObject{
00036 protected:
00037    TIter           *fNext;            // "standard" ROOT iterator for containers
00038    TIter           *fNextSet[100];    // the list of the TList iterators to bypass the whole dataset
00039    Int_t            fDepth;           // the current depth of the passing
00040    Int_t            fMaxDepth;        // the max depth of the passing (=1 by default)
00041 
00042    TDataSet        *fDataSet;          // Pointer to the last selected TDataSet
00043    TDataSet        *fRootDataSet;      // Pointer to the root TDataSet
00044    TDataSet        *fWorkingDataSet;   // Pointer to the working TDataSet
00045    TDataSet        *NextDataSet(TIter &next);
00046    TDataSet        *NextDataSet(Int_t nDataSet);
00047    TDataSet        *GetNullSet();      // return a fake pointer == -1 casted to (TDataSet *)
00048 
00049    static TDataSet *fgNullDataSet;
00050 public:
00051    TDataSetIter(TDataSet *l=0, Int_t depth=1, Bool_t dir=kIterForward);
00052    TDataSetIter(TDataSet *l, Bool_t dir);
00053    virtual         ~TDataSetIter();
00054 
00055    virtual TDataSet    *Add(TDataSet *set){return Add(set,(TDataSet *)0);}
00056    virtual TDataSet    *Add(TDataSet *set, const Char_t *path);
00057    virtual TDataSet    *Add(TDataSet *set, TDataSet *dataset);
00058 
00059    virtual TDataSet    *Cd(const Char_t *dirname);
00060    virtual TDataSet    *Cd(TDataSet *ds);
00061    virtual TDataSet    *operator()( TDataSet::EDataSetPass mode=TDataSet::kContinue ) {return  Next(mode);}
00062    virtual TDataSet    *operator()(const Char_t *path) { return Find(path); }
00063    virtual TDataSet    *operator[](const Char_t *path);
00064    virtual Int_t        GetDepth() const {return fDepth;}
00065    virtual TDataSet    *Cwd() const {return fWorkingDataSet;}
00066    virtual TDataSet    *Dir(Char_t *dirname);
00067    virtual Int_t        Du() const;            // summarize dataset usage
00068    virtual Int_t        Df() const {return 0;} // report number of free "table" blocks.
00069 
00070    virtual TDataSet    *Find(const Char_t *path, TDataSet *rootset=0,Bool_t mkdir=kFALSE,Bool_t titleFlag=kFALSE);
00071    virtual TDataSet    *FindByPath(const Char_t *path, TDataSet *rootset=0,Bool_t mkdir=kFALSE);
00072    virtual TDataSet    *FindDataSet(const Char_t *name,const Char_t *path="",Option_t *opt="");
00073    virtual TDataSet    *FindByName(const Char_t *name,const Char_t *path="",Option_t *opt="");
00074    virtual TDataSet    *FindByTitle(const Char_t *title,const Char_t *path="",Option_t *opt="");
00075    virtual TDataSet    *FindDataSet(TDataSet *set,const Char_t *path,Option_t *opt="");
00076    virtual TDataSet    *FindByPointer(TDataSet *set,const Char_t *path=0,Option_t *opt="");
00077    virtual TObject     *FindObject(const Char_t *name) const;
00078    virtual TObject     *FindObject(const TObject *obj) const;
00079 
00080    virtual Int_t        Flag(UInt_t flag=TDataSet::kMark,TDataSet::EBitOpt reset=TDataSet::kSet){return Flag((TDataSet *)0,flag,reset);}
00081    virtual Int_t        Flag(const Char_t *path,UInt_t flag=TDataSet::kMark,TDataSet::EBitOpt reset=TDataSet::kSet);
00082    virtual Int_t        Flag(TDataSet *dataset,UInt_t flag=TDataSet::kMark,TDataSet::EBitOpt reset=TDataSet::kSet);
00083 
00084    virtual TDataSet    *Ls(const Char_t *dirname="",Option_t *opt="") const;
00085    virtual TDataSet    *Ls(const Char_t *dirname,Int_t depth) const;
00086    virtual void         ls(Option_t *dirname="") const { Ls(dirname,"");}
00087    virtual TDataSet    *ls(TString dirname,Option_t *opt="") const  {return Ls(dirname.Data(),opt);}
00088    virtual TDataSet    *ls(const Char_t *dirname,Int_t depth) const {return Ls(dirname,depth);}
00089    virtual TDataSet    *Mkdir(const Char_t *dirname);
00090    virtual TDataSet    *Md(const Char_t *dirname)                       {return Mkdir(dirname);}
00091    virtual TString      Path(const Char_t *path)                        {TDataSet *set = Find(path); return set ? set->Path():TString ("");}
00092    virtual TString      Path() {return fWorkingDataSet ?  fWorkingDataSet->Path() : TString ("");}
00093    virtual TDataSet    *Pwd(Option_t *opt="") const                     {if (Cwd()) Cwd()->ls(opt); return Cwd();}
00094    virtual TDataSet    *Rmdir(TDataSet *dataset,Option_t *option="");
00095    virtual TDataSet    *Rmdir(const Char_t *dirname,Option_t *option=""){return Rmdir(Find(dirname),option);}
00096    virtual TDataSet    *Rd(const Char_t *dirname,Option_t *option="")   {return Rmdir(Find(dirname),option);}
00097 
00098    virtual TDataSet    *Shunt(TDataSet *set){return Shunt(set,(TDataSet *)0);}
00099    virtual TDataSet    *Shunt(TDataSet *set, const Char_t *path);
00100    virtual TDataSet    *Shunt(TDataSet *set, TDataSet *dataset);
00101 
00102    virtual TDataSet    *Next( TDataSet::EDataSetPass mode=TDataSet::kContinue);
00103    virtual TDataSet    *Next(const Char_t *path, TDataSet *rootset=0,Bool_t mkdir=kFALSE){return Find(path,rootset,mkdir);}
00104    virtual Bool_t       Notify() { return TObject::Notify();}
00105    virtual void         Notify(TDataSet *dataset);
00106    const  Option_t    *GetOption() const                                { return fNext ? fNext->GetOption():0; }
00107    virtual void         Reset(TDataSet *l=0,Int_t depth=0);
00108    virtual TDataSet    *operator *() const ;
00109    
00110    ClassDef(TDataSetIter,0) // class-iterator to navigate TDataSet structure
00111 };
00112 
00113 #endif
00114 

Generated on Tue Jul 5 14:26:43 2011 for ROOT_528-00b_version by  doxygen 1.5.1