00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 #ifndef STDBTABLEDESCRIPTOR_HH
00070 #define STDBTABLEDESCRIPTOR_HH
00071
00072 #include <string.h>
00073 #include "StTableDescriptorI.h"
00074 #ifndef __CINT__
00075 #include "StDbBuffer.h"
00076 #else
00077 class StDbBuffer;
00078 #endif
00079 struct tableDescriptor {
00080 StTypeE type;
00081 char name[60];
00082 unsigned int size;
00083 unsigned int offset;
00084 unsigned int dimensionlen[4];
00085 };
00086
00087
00088 class StDbTableDescriptor : public StTableDescriptorI {
00089
00090 protected:
00091
00092 unsigned int mnumElements;
00093 unsigned int mtableSize;
00094 int offsetToNextEmptyByte;
00095 int offsetToLast4Bytes;
00096 StTypeE lastType;
00097 int padsize;
00098
00099 unsigned int mAlign[Stmaxtype];
00100
00101 tableDescriptor* mcols;
00102 int mMax;
00103 int mCur;
00104
00105
00106 int mstructID;
00107 int mschemaID;
00108 int rowSizeTT;
00109 bool misValid;
00110 bool mhasDouble;
00111 unsigned int maxAlign;
00112
00113 void init();
00114 virtual void reSize();
00115 virtual void fillSizeAndOffset(char* length, int elementNum);
00116 virtual void fillLengths(char* length, int elementNum);
00117 virtual StTypeE getType(char* type);
00118 virtual unsigned int getSize(StTypeE type);
00119 virtual unsigned int getAlign(StTypeE type);
00120
00121 public:
00122
00123 StDbTableDescriptor();
00124 StDbTableDescriptor(int structID, int schemaID);
00125 StDbTableDescriptor(StDbTableDescriptor& d);
00126 virtual ~StDbTableDescriptor() {if(mcols) delete [] mcols; }
00127 virtual void fillElement(StDbBuffer* buff, int tableID);
00128
00129 virtual StTableDescriptorI* getCpy();
00130 virtual tableDescriptor* getTableDescriptor() const;
00131 virtual unsigned int getNumElements() const;
00132 virtual unsigned int getTotalSizeInBytes() const;
00133 virtual char* getElementName(int elementNum) const;
00134 virtual unsigned int getElementOffset(int elementNum) const;
00135 virtual unsigned int getElementSize(int elementNum) const;
00136 virtual StTypeE getElementType(int elementNum) const;
00137 virtual unsigned int* getElementDimensions(int elementNum) const;
00138 virtual unsigned int getElementLength(int elementNum) const;
00139 virtual unsigned int getElementNumDimensions(int elementNum) const;
00140 virtual unsigned int getElementIndexLength(int elementNum, int dimensionNum) const;
00141
00142
00143 int getSchemaID() const;
00144 int getStructID() const;
00145 void setSchemaID(int id);
00146 void setStructID(int id);
00147 bool IsValid() const;
00148 int getCurrentInternalSize();
00149 int getTrowSize() ;
00150 void endRowPadding();
00151 void storeRowSize(int rowSize);
00152 unsigned int getMaxAlign();
00153
00154 };
00155 #ifndef __CINT__
00156 inline unsigned int
00157 StDbTableDescriptor::getNumElements() const {return mnumElements;}
00158
00159 inline unsigned int
00160 StDbTableDescriptor::getTotalSizeInBytes() const {return mtableSize;}
00161
00162 inline char*
00163 StDbTableDescriptor::getElementName(int elementNum) const {
00164 char* retVal = new char[strlen(mcols[elementNum].name)+1];
00165 strcpy(retVal,mcols[elementNum].name);
00166 return retVal;
00167 }
00168
00169 inline unsigned int
00170 StDbTableDescriptor::getElementOffset(int elementNum) const {
00171 return mcols[elementNum].offset;
00172 }
00173
00174 inline unsigned int StDbTableDescriptor::getElementSize(int elementNum) const{
00175 return mcols[elementNum].size;
00176 }
00177
00178 inline StTypeE StDbTableDescriptor::getElementType(int elementNum) const {
00179 return mcols[elementNum].type;
00180 }
00181
00182 inline unsigned int*
00183 StDbTableDescriptor::getElementDimensions(int elementNum) const {
00184 return &mcols[elementNum].dimensionlen[0];
00185 }
00186
00188
00189 inline unsigned int
00190 StDbTableDescriptor::getElementLength(int elementNum) const {
00191
00192 int retVal=1;
00193 int j;
00194 int k= (int)(sizeof(mcols[elementNum].dimensionlen)/sizeof(j));
00195 for(j=0;j<k;j++)retVal *= mcols[elementNum].dimensionlen[j];
00196 return retVal;
00197 }
00198
00200
00201 inline unsigned int
00202 StDbTableDescriptor::getElementNumDimensions(int elementNum) const {
00203 int retVal=1;
00204 int j;
00205 int k= (int)(sizeof(mcols[elementNum].dimensionlen)/sizeof(j));
00206 for(j=0;j<k;j++){
00207 if(mcols[elementNum].dimensionlen[j]>1)retVal=j+1;
00208 }
00209 return retVal;
00210 }
00211
00212 inline unsigned int
00213 StDbTableDescriptor::getElementIndexLength(int elementNum, int dimensionNum) const {
00214 return mcols[elementNum].dimensionlen[dimensionNum];
00215 }
00216
00217 inline unsigned int StDbTableDescriptor::getSize(StTypeE type){ return mycsize[type];}
00218 inline unsigned int StDbTableDescriptor::getAlign(StTypeE type){ return mAlign[type];}
00219 inline int StDbTableDescriptor::getSchemaID() const { return mschemaID; }
00220 inline int StDbTableDescriptor::getStructID() const { return mstructID; }
00221 inline void StDbTableDescriptor::setSchemaID(int id) { mschemaID=id; }
00222 inline void StDbTableDescriptor::setStructID(int id) { mstructID=id; }
00223 inline bool StDbTableDescriptor::IsValid() const { return misValid; }
00224 inline int StDbTableDescriptor::getCurrentInternalSize() { return mMax; };
00225 inline void StDbTableDescriptor::storeRowSize(int rowSize) { rowSizeTT = rowSize; }
00226 inline int StDbTableDescriptor::getTrowSize() { return rowSizeTT; };
00227 inline unsigned int StDbTableDescriptor::getMaxAlign() { return maxAlign; };
00228 #endif
00229
00230 #endif
00231
00232
00233
00234
00235
00236