TDataSet.h

Go to the documentation of this file.
00001 // @(#)root/table:$Id: TDataSet.h 27157 2009-01-15 14:05:12Z brun $
00002 // Author: Valery Fine(fine@mail.cern.ch)   03/07/98
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, 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_TDataSet
00013 #define ROOT_TDataSet
00014 
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 // TDataSet                                                             //
00019 //                                                                      //
00020 // TDataSet class is a base class to implement the directory-like       //
00021 // data structures and maintain it via TDataSetIter class iterator      //
00022 //                                                                      //
00023 //////////////////////////////////////////////////////////////////////////
00024 
00025 #include "TList.h"
00026 #include "TObjArray.h"
00027 
00028 #include "TNamed.h"
00029 #include "TNode.h"
00030 
00031 class TDataSetIter;
00032 class TBrowser;
00033 
00034 class TDataSet : public TNamed
00035 {
00036 friend class TDataSetIter;
00037 public:
00038    // The control codes to navigate the TDataSet structure via TDataSet::Pass method
00039 
00040    typedef enum {
00041          kContinue,  // continue passing
00042          kPrune,     // stop passing of the current branch but continue with the next one if any
00043          kStop,      // break passing
00044          kUp,        // break passing, return to the previous level, then continue
00045          kStruct,    // work with structural links only
00046          kAll,       // work with all links
00047          kRefs,      // work with refs links only
00048          kMarked     // work with marked links only
00049     } EDataSetPass;
00050 
00051 private:
00052    void operator=(const TDataSet &){}
00053 // --   Int_t IncCnt(){ fCnt++; return fCnt;}
00054 // --   Int_t DecCnt(){ fCnt--; return fCnt;}
00055 // --   Int_t Cnt()   { return fCnt;}
00056 protected:
00057    static TDataSet    *fgMainSet; // pointer the main dataset;
00058    TDataSet           *fParent;   // pointer to mother of the directory
00059    TSeqCollection     *fList;     // List of the the the objects included into this dataset
00060 // --     Int_t               fCnt;      // reference counter.
00061    virtual void SetMother(TObject *mother) {SetParent((TDataSet*)mother);}
00062    TDataSet(const char *name,const char *title):
00063    TNamed(name,title),fParent(0),fList(0){} // to support TDictionary
00064    void AddMain(TDataSet *set);
00065    static EDataSetPass SortIt(TDataSet *ds);
00066    static EDataSetPass SortIt(TDataSet *ds,void *user);
00067    TDataSet *GetRealParent();
00068    void MakeCollection();
00069 
00070 
00071 public:
00072  
00073    //----- dataset flags
00074    enum ESetBits {
00075       kMark        = BIT(22)   // if object is marked
00076      ,kArray       = BIT(20)   // if object has TObjArray inside
00077    };
00078 
00079    enum EBitOpt {
00080                kSet   = kTRUE,
00081                kReset = kFALSE
00082              };
00083 
00084    TDataSet(const char *name="", TDataSet *parent=0,  Bool_t arrayFlag = kFALSE);
00085    TDataSet(const TDataSet &src,EDataSetPass iopt=kAll);
00086    TDataSet(TNode &src);
00087    virtual ~TDataSet();
00088    virtual void         Add(TDataSet *dataset);
00089    virtual void         AddAt(TDataSet *dataset,Int_t idx=0);
00090    virtual void         AddAtAndExpand(TDataSet *dataset, Int_t idx=0);
00091    virtual void         AddFirst(TDataSet *dataset);
00092    virtual void         AddLast(TDataSet *dataset);
00093    TDataSet            *At(Int_t idx) const;
00094    virtual void         Browse(TBrowser *b);
00095    virtual TObject     *Clone(const char *newname="") const;
00096    virtual void         Delete(Option_t *opt="");
00097    virtual TDataSet    *Find(const char *path) const;
00098    virtual TDataSet    *FindByName(const char *name,const char *path="",Option_t *opt="") const;
00099    virtual TDataSet    *FindByPath(const char *path) const;
00100    virtual TDataSet    *FindByTitle(const char *title,const char *path="",Option_t *opt="") const;
00101    TObject             *FindObject(const char *name) const {return FindByName(name);}
00102    TObject             *FindObject(const TObject *o)  const { return TObject::FindObject(o);}
00103    virtual TDataSet    *First() const;
00104    TObjArray           *GetObjArray() const { return (TObjArray *)fList; }
00105    virtual TSeqCollection *GetCollection() const { return (TSeqCollection *)fList; }
00106    TList               *GetList()   const { return (TList *)fList; }
00107    virtual Int_t        GetListSize() const;
00108    static  TDataSet    *GetMainSet();
00109    TObject             *GetMother() const { return (TObject*)GetParent();}
00110    virtual TObject     *GetObject() const;
00111    virtual TDataSet    *GetParent() const { return fParent;}
00112    virtual Long_t       HasData() const {return 0;}    // Check whether this dataset has extra "data-members"
00113    virtual TDataSet    *Instance() const;
00114    static  TDataSet    *instance();
00115    virtual TString      Path() const;                  // return the "full" path of this dataset
00116    virtual EDataSetPass Pass(EDataSetPass ( *callback)(TDataSet *),Int_t depth=0);
00117    virtual EDataSetPass Pass(EDataSetPass ( *callback)(TDataSet *,void*),void *user,Int_t depth=0);
00118    virtual void         PrintContents(Option_t *opt="") const;
00119    virtual Int_t        Purge(Option_t *opt="");
00120    virtual void         Remove(TDataSet *set);
00121    virtual TDataSet    *RemoveAt(Int_t idx);
00122    virtual void         SetMother(TDataSet *parent=0){SetParent(parent);};
00123    virtual void         SetObject(TObject *obj);
00124    virtual void         SetParent(TDataSet *parent=0);
00125    virtual void         SetWrite();
00126    virtual void         Shunt(TDataSet *newParent=0);
00127    virtual void         Sort();                        //Sort objects in lexical order
00128    virtual Bool_t       IsEmpty() const;
00129    virtual Bool_t       IsFolder() const {return kTRUE;}
00130    virtual Bool_t       IsMarked() const ;
00131    virtual Bool_t       IsThisDir(const char *dirname,int len=-1,int ignorecase=0) const ;
00132    virtual TDataSet    *Last() const;
00133    virtual void         ls(Option_t *option="")  const;      // Option "*" means print all levels
00134    virtual void         ls(Int_t depth)  const;              // Print the "depth" levels of this datatset
00135    void                 Mark();                              // *MENU*
00136    void                 UnMark();                            // *MENU*
00137    void                 MarkAll();                           // *MENU*
00138    void                 UnMarkAll();                         // *MENU*
00139    void                 InvertAllMarks();                    // *MENU*
00140    void                 Mark(UInt_t flag,EBitOpt reset=kSet);
00141    virtual TDataSet    *Next() const;
00142    virtual TDataSet    *Prev() const;
00143    virtual void         Update();                            // Update dataset
00144    virtual void         Update(TDataSet *set,UInt_t opt=0);// Update this dataset with the new one
00145    virtual Int_t        Write(const char *name=0, Int_t option=0, Int_t bufsize=0);
00146    virtual Int_t        Write(const char *name=0, Int_t option=0, Int_t bufsize=0) const;
00147    ClassDef(TDataSet,1) // The base class to create the hierarchical data structures
00148 };
00149 
00150 inline void        TDataSet::Add(TDataSet *dataset){ AddLast(dataset); }
00151 inline TDataSet   *TDataSet::At(Int_t idx) const {return fList ? (TDataSet *)fList->At(idx) : 0;  }
00152 inline Int_t       TDataSet::GetListSize() const {return (fList) ? fList->GetSize():0;}
00153 inline TDataSet   *TDataSet::instance() { return new TDataSet();}
00154 inline Bool_t      TDataSet::IsMarked() const { return TestBit(kMark); }
00155 inline void        TDataSet::Mark(UInt_t flag,EBitOpt reset){ SetBit(flag,reset); }
00156 inline void        TDataSet::Mark()     { Mark(kMark,kSet); }
00157 inline void        TDataSet::UnMark()   { Mark(kMark,kReset); }
00158 
00159 
00160 #endif

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