1    	// @(#)root/table:$Id$
2    	// Author: Valery Fine   09/08/99  (E-mail: fine@bnl.gov)
3    	
4    	/*************************************************************************
5    	 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
6    	 * All rights reserved.                                                  *
7    	 *                                                                       *
8    	 * For the licensing terms see $ROOTSYS/LICENSE.                         *
9    	 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
10   	 *************************************************************************/
11   	
12   	#ifndef ROOT_TTableDescriptor
13   	#define ROOT_TTableDescriptor
14   	
(1) Event include_recursion: #include file "/afs/rhic.bnl.gov/star/ROOT/5.34.30/.sl64_gcc482/root/include/TTable.h" includes itself: TTable.h -> TTableDescriptor.h -> TTable.h (other events go to each file)
(2) Event primary_file: During compilation of file '/home/tmp/genevb/COVA/.sl64_gcc482/OBJ/StRoot/St_base/St_Module.cxx'
(3) Event caretline: ^
Also see events: [include_recursion]
15   	#include "TTable.h"
16   	#include "tableDescriptor.h"
17   	
18   	class TClass;
19   	//______________________________________________________________________________
20   	//
21   	// TTableDescriptor - run-time descriptor of the TTable object rows.
22   	//______________________________________________________________________________
23   	
24   	
25   	class TTableDescriptor : public TTable {
26   	private:
27   	   TTableDescriptor &operator=(const TTableDescriptor &dsc); // Intentionally not implemented.
28   	protected:
29   	   friend class TTable;
30   	   TClass  *fRowClass;                  // TClass defining 
31   	                                          // the table row C-structure
32   	   TTableDescriptor *fSecondDescriptor; // shadow descriptor 
33   	                                          // to back TTable::Streamer
34   	   static TString fgCommentsName;        // The name of dataset to keep the comments fields
35   	   virtual void Init(TClass *classPtr);
36   	   static void SetCommentsSetName(const char *name=".comments");
37   	
38   	public:
39   	
40   	   TTableDescriptor(const TTable *parentTable);
41   	   TTableDescriptor(TClass *classPtr);
42   	   TTableDescriptor(const TTableDescriptor &dsc):TTable(dsc),fRowClass(dsc.fRowClass),fSecondDescriptor(0){}
43   	   virtual ~TTableDescriptor();
44   	   virtual  Int_t  AddAt(const void *c);
45   	   virtual  void   AddAt(const void *c, Int_t i);
46   	   virtual  void   AddAt(const tableDescriptor_st &element, const char *comment,Int_t indx);
47   	   virtual  void   AddAt(TDataSet *dataset,Int_t idx=0);
48   	   TString         CreateLeafList() const;
49   	   void            LearnTable(const TTable *parentTable);
50   	   void            LearnTable(TClass *classPtr);
51   	   const Char_t   *ColumnName(Int_t columnIndex)              const;
52   	   Int_t           ColumnByName(const Char_t *columnName=0)   const;
53   	   UInt_t          NumberOfColumns()                          const;
54   	   const UInt_t   *IndexArray(Int_t columnIndex)              const;
55   	   UInt_t          Offset(Int_t columnIndex)                  const;
56   	   Int_t           Offset(const Char_t *columnName=0)         const;
57   	   UInt_t          ColumnSize(Int_t columnIndex)              const;
58   	   Int_t           ColumnSize(const Char_t *columnName=0)     const;
59   	   UInt_t          TypeSize(Int_t columnIndex)                const;
60   	   Int_t           TypeSize(const Char_t *columnName=0)       const;
61   	   UInt_t          Dimensions(Int_t columnIndex)              const;
62   	   Int_t           Dimensions(const Char_t *columnName=0)     const;
63   	   TTable::EColumnType ColumnType(Int_t columnIndex)          const;
64   	   TTable::EColumnType ColumnType(const Char_t *columnName=0) const;
65   	   TClass         *RowClass() const;
66   	   void            SetOffset(UInt_t offset,Int_t column);
67   	   void            SetSize(UInt_t size,Int_t column);
68   	   void            SetTypeSize(UInt_t size,Int_t column);
69   	   void            SetDimensions(UInt_t dim,Int_t column);
70   	   Int_t           Sizeof() const;
71   	   void            SetColumnType(TTable::EColumnType type,Int_t column);
72   	   virtual Int_t   UpdateOffsets(const TTableDescriptor *newDesciptor);
73   	
74   	   static          TTableDescriptor *MakeDescriptor(const char *structName);
75   	   TDataSet       *MakeCommentField(Bool_t createFlag=kTRUE);
76   	
77   	//    ClassDefTable(TTableDescriptor,tableDescriptor_st)
78   	protected:                                        
79   	   static  TTableDescriptor *fgColDescriptors;     
80   	   virtual TTableDescriptor *GetDescriptorPointer() const;
81   	   virtual void SetDescriptorPointer(TTableDescriptor *list);
82   	public:                                           
83   	   typedef tableDescriptor_st* iterator;                   
84   	   TTableDescriptor() : TTable("TTableDescriptor",sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}      
85   	   TTableDescriptor(const char *name) : TTable(name,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}     
86   	   TTableDescriptor(Int_t n) : TTable("TTableDescriptor",n,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}
87   	   TTableDescriptor(const char *name,Int_t n) : TTable(name,n,sizeof(tableDescriptor_st)), fRowClass(0), fSecondDescriptor(0) {SetType("tableDescriptor_st");}
88   	   tableDescriptor_st *GetTable(Int_t i=0) const { return ((tableDescriptor_st *)GetArray())+i;}                       
89   	   tableDescriptor_st &operator[](Int_t i){ assert(i>=0 && i < GetNRows()); return *GetTable(i); }             
90   	   const tableDescriptor_st &operator[](Int_t i) const { assert(i>=0 && i < GetNRows()); return *((const tableDescriptor_st *)(GetTable(i))); } 
91   	   tableDescriptor_st *begin() const  {                      return GetNRows()? GetTable(0):0;}
92   	   tableDescriptor_st *end()   const  {Long_t i = GetNRows(); return          i? GetTable(i):0;}
93   	   static const char *TableDictionary();
94   	   ClassDef(TTableDescriptor,0) // descrpitor defining the internal layout of TTable objects
95   	};
96   	
97   	//______________________________________________________________________________
98   	// inline  TTableDescriptor(const TTableDescriptor &dsc) : TTable(dsc), fRowClass(dsc.fRowClass),fSecondDescriptor(0){}
99   	inline  const Char_t *TTableDescriptor::ColumnName(Int_t column)const {return ((tableDescriptor_st *)At(column))->fColumnName;}
100  	inline  UInt_t  TTableDescriptor::Offset(Int_t column)          const {return ((tableDescriptor_st *)At(column))->fOffset;    }
101  	inline  const UInt_t *TTableDescriptor::IndexArray(Int_t column)const {return ((tableDescriptor_st *)At(column))->fIndexArray;}
102  	inline  UInt_t  TTableDescriptor::NumberOfColumns()             const {return  GetNRows();                                      }
103  	inline  UInt_t  TTableDescriptor::ColumnSize(Int_t column)      const {return ((tableDescriptor_st *)At(column))->fSize;      }
104  	inline  UInt_t  TTableDescriptor::TypeSize(Int_t column)        const {return ((tableDescriptor_st *)At(column))->fTypeSize;  }
105  	inline  UInt_t  TTableDescriptor::Dimensions(Int_t column)      const {return ((tableDescriptor_st *)At(column))->fDimensions;}
106  	inline  TTable::EColumnType TTableDescriptor::ColumnType(Int_t column) const {return EColumnType(((tableDescriptor_st *)At(column))->fType);}
107  	inline  TClass *TTableDescriptor::RowClass() const { return fRowClass;}
108  	inline  void    TTableDescriptor::SetOffset(UInt_t offset,Int_t column)  {((tableDescriptor_st *)At(column))->fOffset     = offset;}
109  	inline  void    TTableDescriptor::SetSize(UInt_t size,Int_t column)      {((tableDescriptor_st *)At(column))->fSize       = size;  }
110  	inline  void    TTableDescriptor::SetTypeSize(UInt_t size,Int_t column)  {((tableDescriptor_st *)At(column))->fTypeSize   = size;  }
111  	inline  void    TTableDescriptor::SetDimensions(UInt_t dim,Int_t column) {((tableDescriptor_st *)At(column))->fDimensions = dim;   }
112  	inline  void    TTableDescriptor::SetColumnType(TTable::EColumnType type,Int_t column) {((tableDescriptor_st *)At(column))->fType = type;  }
113  	
114  	#endif
115