TTableDescriptor.h

Go to the documentation of this file.
00001 // @(#)root/table:$Id: TTableDescriptor.h 27157 2009-01-15 14:05:12Z brun $
00002 // Author: Valery Fine   09/08/99  (E-mail: fine@bnl.gov)
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_TTableDescriptor
00013 #define ROOT_TTableDescriptor
00014 
00015 #include "TTable.h"
00016 #include "tableDescriptor.h"
00017 
00018 class TClass;
00019 //______________________________________________________________________________
00020 //
00021 // TTableDescriptor - run-time descriptor of the TTable object rows.
00022 //______________________________________________________________________________
00023 
00024 
00025 class TTableDescriptor : public TTable {
00026 protected:
00027    friend class TTable;
00028    TClass  *fRowClass;                  // TClass defining 
00029                                           // the table row C-structure
00030    TTableDescriptor *fSecondDescriptor; // shadow descriptor 
00031                                           // to back TTable::Streamer
00032    static TString fgCommentsName;        // The name of dataset to keep the comments fields
00033    virtual void Init(TClass *classPtr);
00034    static void SetCommentsSetName(const char *name=".comments");
00035 
00036 public:
00037 
00038    TTableDescriptor(const TTable *parentTable);
00039    TTableDescriptor(TClass *classPtr);
00040    TTableDescriptor(const TTableDescriptor &dsc):TTable(dsc),fRowClass(dsc.fRowClass),fSecondDescriptor(0){}
00041    virtual ~TTableDescriptor();
00042    virtual  Int_t  AddAt(const void *c);
00043    virtual  void   AddAt(const void *c, Int_t i);
00044    virtual  void   AddAt(const tableDescriptor_st &element, const char *comment,Int_t indx);
00045    virtual  void   AddAt(TDataSet *dataset,Int_t idx=0);
00046    TString         CreateLeafList() const;
00047    void            LearnTable(const TTable *parentTable);
00048    void            LearnTable(TClass *classPtr);
00049    const Char_t   *ColumnName(Int_t columnIndex)              const;
00050    Int_t           ColumnByName(const Char_t *columnName=0)   const;
00051    UInt_t          NumberOfColumns()                          const;
00052    const UInt_t   *IndexArray(Int_t columnIndex)              const;
00053    UInt_t          Offset(Int_t columnIndex)                  const;
00054    Int_t           Offset(const Char_t *columnName=0)         const;
00055    UInt_t          ColumnSize(Int_t columnIndex)              const;
00056    Int_t           ColumnSize(const Char_t *columnName=0)     const;
00057    UInt_t          TypeSize(Int_t columnIndex)                const;
00058    Int_t           TypeSize(const Char_t *columnName=0)       const;
00059    UInt_t          Dimensions(Int_t columnIndex)              const;
00060    Int_t           Dimensions(const Char_t *columnName=0)     const;
00061    TTable::EColumnType ColumnType(Int_t columnIndex)          const;
00062    TTable::EColumnType ColumnType(const Char_t *columnName=0) const;
00063    TClass         *RowClass() const;
00064    void            SetOffset(UInt_t offset,Int_t column);
00065    void            SetSize(UInt_t size,Int_t column);
00066    void            SetTypeSize(UInt_t size,Int_t column);
00067    void            SetDimensions(UInt_t dim,Int_t column);
00068    Int_t           Sizeof() const;
00069    void            SetColumnType(TTable::EColumnType type,Int_t column);
00070    virtual Int_t   UpdateOffsets(const TTableDescriptor *newDesciptor);
00071 
00072    static          TTableDescriptor *MakeDescriptor(const char *structName);
00073    TDataSet       *MakeCommentField(Bool_t createFlag=kTRUE);
00074 
00075 //    ClassDefTable(TTableDescriptor,tableDescriptor_st)
00076 protected:                                        
00077    static  TTableDescriptor *fgColDescriptors;     
00078    virtual TTableDescriptor *GetDescriptorPointer() const;
00079    virtual void SetDescriptorPointer(TTableDescriptor *list);
00080 public:                                           
00081    typedef tableDescriptor_st* iterator;                   
00082    TTableDescriptor() : TTable("TTableDescriptor",sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}      
00083    TTableDescriptor(const char *name) : TTable(name,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}     
00084    TTableDescriptor(Int_t n) : TTable("TTableDescriptor",n,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}
00085    TTableDescriptor(const char *name,Int_t n) : TTable(name,n,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}
00086    tableDescriptor_st *GetTable(Int_t i=0) const { return ((tableDescriptor_st *)GetArray())+i;}                       
00087    tableDescriptor_st &operator[](Int_t i){ assert(i>=0 && i < GetNRows()); return *GetTable(i); }             
00088    const tableDescriptor_st &operator[](Int_t i) const { assert(i>=0 && i < GetNRows()); return *((const tableDescriptor_st *)(GetTable(i))); } 
00089    tableDescriptor_st *begin() const  {                      return GetNRows()? GetTable(0):0;}
00090    tableDescriptor_st *end()   const  {Long_t i = GetNRows(); return          i? GetTable(i):0;}
00091    static const char *TableDictionary();
00092    ClassDef(TTableDescriptor,0) // descrpitor defining the internal layout of TTable objects
00093 };
00094 
00095 //______________________________________________________________________________
00096 // inline  TTableDescriptor(const TTableDescriptor &dsc) : TTable(dsc), fRowClass(dsc.fRowClass),fSecondDescriptor(0){}
00097 inline  const Char_t *TTableDescriptor::ColumnName(Int_t column)const {return ((tableDescriptor_st *)At(column))->fColumnName;}
00098 inline  UInt_t  TTableDescriptor::Offset(Int_t column)          const {return ((tableDescriptor_st *)At(column))->fOffset;    }
00099 inline  const UInt_t *TTableDescriptor::IndexArray(Int_t column)const {return ((tableDescriptor_st *)At(column))->fIndexArray;}
00100 inline  UInt_t  TTableDescriptor::NumberOfColumns()             const {return  GetNRows();                                      }
00101 inline  UInt_t  TTableDescriptor::ColumnSize(Int_t column)      const {return ((tableDescriptor_st *)At(column))->fSize;      }
00102 inline  UInt_t  TTableDescriptor::TypeSize(Int_t column)        const {return ((tableDescriptor_st *)At(column))->fTypeSize;  }
00103 inline  UInt_t  TTableDescriptor::Dimensions(Int_t column)      const {return ((tableDescriptor_st *)At(column))->fDimensions;}
00104 inline  TTable::EColumnType TTableDescriptor::ColumnType(Int_t column) const {return EColumnType(((tableDescriptor_st *)At(column))->fType);}
00105 inline  TClass *TTableDescriptor::RowClass() const { return fRowClass;}
00106 inline  void    TTableDescriptor::SetOffset(UInt_t offset,Int_t column)  {((tableDescriptor_st *)At(column))->fOffset     = offset;}
00107 inline  void    TTableDescriptor::SetSize(UInt_t size,Int_t column)      {((tableDescriptor_st *)At(column))->fSize       = size;  }
00108 inline  void    TTableDescriptor::SetTypeSize(UInt_t size,Int_t column)  {((tableDescriptor_st *)At(column))->fTypeSize   = size;  }
00109 inline  void    TTableDescriptor::SetDimensions(UInt_t dim,Int_t column) {((tableDescriptor_st *)At(column))->fDimensions = dim;   }
00110 inline  void    TTableDescriptor::SetColumnType(TTable::EColumnType type,Int_t column) {((tableDescriptor_st *)At(column))->fType = type;  }
00111 
00112 #endif

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