00001
00002
00003
00004
00005
00006
00007
00008
00009
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
00022
00023
00024
00025 class TTableDescriptor : public TTable {
00026 protected:
00027 friend class TTable;
00028 TClass *fRowClass;
00029
00030 TTableDescriptor *fSecondDescriptor;
00031
00032 static TString fgCommentsName;
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
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)
00093 };
00094
00095
00096
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