00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TStreamerElement
00013 #define ROOT_TStreamerElement
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef ROOT_TNamed
00025 #include "TNamed.h"
00026 #endif
00027
00028 class TMethodCall;
00029 class TClass;
00030 class TStreamerBasicType;
00031
00032 class TStreamerElement : public TNamed {
00033
00034 private:
00035 TStreamerElement(const TStreamerElement &);
00036 TStreamerElement&operator=(const TStreamerElement&);
00037
00038 protected:
00039 Int_t fType;
00040 Int_t fSize;
00041 Int_t fArrayLength;
00042 Int_t fArrayDim;
00043 Int_t fMaxIndex[5];
00044 Int_t fOffset;
00045 Int_t fTObjectOffset;
00046 Int_t fNewType;
00047 TString fTypeName;
00048 TClass *fClassObject;
00049 TClass *fNewClass;
00050 TMemberStreamer *fStreamer;
00051 Double_t fXmin;
00052 Double_t fXmax;
00053 Double_t fFactor;
00054
00055 public:
00056
00057 enum ESTLtype { kSTL = 300 ,
00058 kSTLstring = 365 ,
00059 kSTLvector = 1,
00060 kSTLlist = 2, kSTLdeque = 3, kSTLmap = 4,
00061 kSTLset = 5, kSTLmultimap= 6, kSTLmultiset = 7,
00062 kSTLbitset = 8
00063 };
00064
00065 enum {
00066 kHasRange = BIT(6),
00067 kCache = BIT(9),
00068 kRepeat = BIT(10),
00069 kRead = BIT(11),
00070 kWrite = BIT(12),
00071 kDoNotDelete = BIT(13)
00072 };
00073
00074 TStreamerElement();
00075 TStreamerElement(const char *name, const char *title, Int_t offset, Int_t dtype, const char *typeName);
00076 virtual ~TStreamerElement();
00077 virtual Bool_t CannotSplit() const;
00078 Int_t GetArrayDim() const {return fArrayDim;}
00079 Int_t GetArrayLength() const {return fArrayLength;}
00080 virtual TClass *GetClassPointer() const;
00081 TClass *GetClass() const {return GetClassPointer();}
00082 virtual Int_t GetExecID() const;
00083 virtual const char *GetFullName() const;
00084 virtual const char *GetInclude() const {return "";}
00085 Int_t GetMaxIndex(Int_t i) const {return fMaxIndex[i];}
00086 virtual ULong_t GetMethod() const {return ULong_t(fStreamer);}
00087 TMemberStreamer *GetStreamer() const;
00088 virtual Int_t GetSize() const;
00089 Int_t GetNewType() const {return fNewType;}
00090 TClass* GetNewClass() const { return fNewClass; }
00091 Int_t GetType() const {return fType;}
00092 Int_t GetOffset() const {return fOffset;}
00093 Int_t GetTObjectOffset() const { return fTObjectOffset; }
00094 const char *GetTypeName() const {return fTypeName.Data();}
00095 const char *GetTypeNameBasic() const;
00096 Double_t GetFactor() const {return fFactor;}
00097 Double_t GetXmin() const {return fXmin;}
00098 Double_t GetXmax() const {return fXmax;}
00099 virtual void Init(TObject *obj=0);
00100 virtual Bool_t IsaPointer() const {return kFALSE;}
00101 virtual Bool_t HasCounter() const {return kFALSE;}
00102 virtual Bool_t IsOldFormat(const char *newTypeName);
00103 virtual Bool_t IsBase() const;
00104 virtual void ls(Option_t *option="") const;
00105 virtual void SetArrayDim(Int_t dim);
00106 virtual void SetMaxIndex(Int_t dim, Int_t max);
00107 virtual void SetOffset(Int_t offset) {fOffset=offset;}
00108 virtual void SetTObjectOffset(Int_t tobjoffset) {fTObjectOffset=tobjoffset;}
00109 virtual void SetStreamer(TMemberStreamer *streamer);
00110 virtual void SetSize(Int_t dsize) {fSize = dsize;}
00111 virtual void SetNewType(Int_t dtype) {fNewType = dtype;}
00112 virtual void SetNewClass( TClass* cl ) { fNewClass= cl; }
00113 virtual void SetType(Int_t dtype) {fType = dtype;}
00114 virtual void SetTypeName(const char *name) {fTypeName = name; fClassObject = (TClass*)-1; }
00115 virtual void Update(const TClass *oldClass, TClass *newClass);
00116
00117 ClassDef(TStreamerElement,4)
00118 };
00119
00120
00121 class TStreamerBase : public TStreamerElement {
00122
00123 private:
00124 TStreamerBase(const TStreamerBase &);
00125 TStreamerBase&operator=(const TStreamerBase&);
00126
00127 protected:
00128 Int_t fBaseVersion;
00129 TClass *fBaseClass;
00130 TClass *fNewBaseClass;
00131 ClassStreamerFunc_t fStreamerFunc;
00132
00133 public:
00134
00135 TStreamerBase();
00136 TStreamerBase(const char *name, const char *title, Int_t offset);
00137 virtual ~TStreamerBase();
00138 Int_t GetBaseVersion() {return fBaseVersion;}
00139 virtual TClass *GetClassPointer() const;
00140 const char *GetInclude() const;
00141 TClass *GetNewBaseClass() { return fNewBaseClass; }
00142 ULong_t GetMethod() const {return 0;}
00143 Int_t GetSize() const;
00144 virtual void Init(TObject *obj=0);
00145 Bool_t IsBase() const;
00146 virtual void ls(Option_t *option="") const;
00147 Int_t ReadBuffer (TBuffer &b, char *pointer);
00148 void SetNewBaseClass( TClass* cl ) { fNewBaseClass = cl; }
00149 void SetBaseVersion(Int_t v) {fBaseVersion = v;}
00150 virtual void Update(const TClass *oldClass, TClass *newClass);
00151 Int_t WriteBuffer(TBuffer &b, char *pointer);
00152
00153 ClassDef(TStreamerBase,3)
00154 };
00155
00156
00157 class TStreamerBasicPointer : public TStreamerElement {
00158
00159 private:
00160 TStreamerBasicPointer(const TStreamerBasicPointer &);
00161 TStreamerBasicPointer&operator=(const TStreamerBasicPointer&);
00162
00163 protected:
00164 Int_t fCountVersion;
00165 TString fCountName;
00166 TString fCountClass;
00167 TStreamerBasicType *fCounter;
00168
00169 public:
00170
00171 TStreamerBasicPointer();
00172 TStreamerBasicPointer(const char *name, const char *title, Int_t offset, Int_t dtype,
00173 const char *countName, const char *countClass, Int_t version, const char *typeName);
00174 virtual ~TStreamerBasicPointer();
00175 const char *GetCountClass() const {return fCountClass.Data();}
00176 const char *GetCountName() const {return fCountName.Data();}
00177 Int_t GetCountVersion() const {return fCountVersion;}
00178 ULong_t GetMethod() const;
00179 Int_t GetSize() const;
00180 virtual void Init(TObject *obj=0);
00181 virtual Bool_t HasCounter() const {return fCounter!=0; }
00182 virtual Bool_t IsaPointer() const {return kTRUE; }
00183 void SetArrayDim(Int_t dim);
00184 void SetCountClass(const char *clname) {fCountClass = clname; }
00185 void SetCountName(const char *name) {fCountName = name; }
00186 void SetCountVersion(Int_t count) {fCountVersion = count;}
00187
00188 ClassDef(TStreamerBasicPointer,2)
00189 };
00190
00191
00192 class TStreamerLoop : public TStreamerElement {
00193
00194 private:
00195 TStreamerLoop(const TStreamerLoop&);
00196 TStreamerLoop&operator=(const TStreamerLoop&);
00197
00198 protected:
00199 Int_t fCountVersion;
00200 TString fCountName;
00201 TString fCountClass;
00202 TStreamerBasicType *fCounter;
00203
00204 public:
00205
00206 TStreamerLoop();
00207 TStreamerLoop(const char *name, const char *title, Int_t offset, const char *countName, const char *countClass, Int_t version, const char *typeName);
00208 virtual ~TStreamerLoop();
00209 const char *GetCountClass() const {return fCountClass.Data();}
00210 const char *GetCountName() const {return fCountName.Data();}
00211 Int_t GetCountVersion() const {return fCountVersion;}
00212 const char *GetInclude() const;
00213 ULong_t GetMethod() const;
00214 Int_t GetSize() const;
00215 virtual void Init(TObject *obj=0);
00216 virtual Bool_t IsaPointer() const {return kTRUE; }
00217 virtual Bool_t HasCounter() const {return fCounter!=0; }
00218 void SetCountClass(const char *clname) {fCountClass = clname; }
00219 void SetCountName(const char *name) {fCountName = name; }
00220 void SetCountVersion(Int_t count) {fCountVersion = count;}
00221
00222 ClassDef(TStreamerLoop,2)
00223 };
00224
00225
00226 class TStreamerBasicType : public TStreamerElement {
00227
00228 private:
00229 TStreamerBasicType(const TStreamerBasicType&);
00230 TStreamerBasicType&operator=(const TStreamerBasicType&);
00231
00232 protected:
00233 Int_t fCounter;
00234
00235 public:
00236
00237 TStreamerBasicType();
00238 TStreamerBasicType(const char *name, const char *title, Int_t offset, Int_t dtype, const char *typeName);
00239 virtual ~TStreamerBasicType();
00240 Int_t GetCounter() const {return fCounter;}
00241 ULong_t GetMethod() const;
00242 Int_t GetSize() const;
00243
00244 ClassDef(TStreamerBasicType,2)
00245 };
00246
00247
00248 class TStreamerObject : public TStreamerElement {
00249
00250 private:
00251 TStreamerObject(const TStreamerObject&);
00252 TStreamerObject&operator=(const TStreamerObject&);
00253
00254 public:
00255
00256 TStreamerObject();
00257 TStreamerObject(const char *name, const char *title, Int_t offset, const char *typeName);
00258 virtual ~TStreamerObject();
00259 const char *GetInclude() const;
00260 Int_t GetSize() const;
00261 virtual void Init(TObject *obj=0);
00262
00263 ClassDef(TStreamerObject,2)
00264 };
00265
00266
00267 class TStreamerObjectAny : public TStreamerElement {
00268
00269 private:
00270 TStreamerObjectAny(const TStreamerObjectAny&);
00271 TStreamerObjectAny&operator=(const TStreamerObjectAny&);
00272
00273 public:
00274
00275 TStreamerObjectAny();
00276 TStreamerObjectAny(const char *name, const char *title, Int_t offset, const char *typeName);
00277 virtual ~TStreamerObjectAny();
00278 const char *GetInclude() const;
00279 Int_t GetSize() const;
00280 virtual void Init(TObject *obj=0);
00281
00282 ClassDef(TStreamerObjectAny,2)
00283 };
00284
00285
00286 class TStreamerObjectPointer : public TStreamerElement {
00287
00288 private:
00289 TStreamerObjectPointer(const TStreamerObjectPointer&);
00290 TStreamerObjectPointer&operator=(const TStreamerObjectPointer&);
00291
00292 public:
00293
00294 TStreamerObjectPointer();
00295 TStreamerObjectPointer(const char *name, const char *title, Int_t offset, const char *typeName);
00296 virtual ~TStreamerObjectPointer();
00297 const char *GetInclude() const;
00298 Int_t GetSize() const;
00299 virtual void Init(TObject *obj=0);
00300 virtual Bool_t IsaPointer() const {return kTRUE;}
00301 virtual void SetArrayDim(Int_t dim);
00302
00303 ClassDef(TStreamerObjectPointer,2)
00304 };
00305
00306
00307 class TStreamerObjectAnyPointer : public TStreamerElement {
00308
00309 private:
00310 TStreamerObjectAnyPointer(const TStreamerObjectAnyPointer&);
00311 TStreamerObjectAnyPointer&operator=(const TStreamerObjectAnyPointer&);
00312
00313 public:
00314
00315 TStreamerObjectAnyPointer();
00316 TStreamerObjectAnyPointer(const char *name, const char *title, Int_t offset, const char *typeName);
00317 virtual ~TStreamerObjectAnyPointer();
00318 const char *GetInclude() const;
00319 Int_t GetSize() const;
00320 virtual void Init(TObject *obj=0);
00321 virtual Bool_t IsaPointer() const {return kTRUE;}
00322 virtual void SetArrayDim(Int_t dim);
00323
00324 ClassDef(TStreamerObjectAnyPointer,1)
00325 };
00326
00327
00328 class TStreamerString : public TStreamerElement {
00329
00330 private:
00331 TStreamerString(const TStreamerString&);
00332 TStreamerString&operator=(const TStreamerString&);
00333
00334 public:
00335
00336 TStreamerString();
00337 TStreamerString(const char *name, const char *title, Int_t offset);
00338 virtual ~TStreamerString();
00339 const char *GetInclude() const;
00340 Int_t GetSize() const;
00341
00342 ClassDef(TStreamerString,2)
00343 };
00344
00345
00346 class TStreamerSTL : public TStreamerElement {
00347
00348 enum {
00349 kWarned = BIT(21)
00350 };
00351
00352 private:
00353 TStreamerSTL(const TStreamerSTL&);
00354 TStreamerSTL&operator=(const TStreamerSTL&);
00355
00356 protected:
00357 Int_t fSTLtype;
00358 Int_t fCtype;
00359
00360 public:
00361
00362 TStreamerSTL();
00363 TStreamerSTL(const char *name, const char *title, Int_t offset,
00364 const char *typeName, const char *trueType, Bool_t dmPointer);
00365 virtual ~TStreamerSTL();
00366 Bool_t CannotSplit() const;
00367 Bool_t IsaPointer() const;
00368 Bool_t IsBase() const;
00369 Int_t GetSTLtype() const {return fSTLtype;}
00370 Int_t GetCtype() const {return fCtype;}
00371 const char *GetInclude() const;
00372 Int_t GetSize() const;
00373 virtual void ls(Option_t *option="") const;
00374 void SetSTLtype(Int_t t) {fSTLtype = t;}
00375 void SetCtype(Int_t t) {fCtype = t;}
00376 virtual void SetStreamer(TMemberStreamer *streamer);
00377
00378 ClassDef(TStreamerSTL,3)
00379 };
00380
00381
00382 class TStreamerSTLstring : public TStreamerSTL {
00383
00384 private:
00385 TStreamerSTLstring(const TStreamerSTLstring&);
00386 TStreamerSTLstring&operator=(const TStreamerSTLstring&);
00387
00388 public:
00389
00390 TStreamerSTLstring();
00391 TStreamerSTLstring(const char *name, const char *title, Int_t offset,
00392 const char *typeName, Bool_t dmPointer);
00393 virtual ~TStreamerSTLstring();
00394 const char *GetInclude() const;
00395 Int_t GetSize() const;
00396
00397 ClassDef(TStreamerSTLstring,2)
00398 };
00399
00400 class TVirtualObject;
00401 class TBuffer;
00402
00403 #include "TSchemaRule.h"
00404
00405
00406 class TStreamerArtificial : public TStreamerElement {
00407 private:
00408 TStreamerArtificial(const TStreamerArtificial&);
00409 TStreamerArtificial&operator=(const TStreamerArtificial&);
00410
00411 protected:
00412 ROOT::TSchemaRule::ReadFuncPtr_t fReadFunc;
00413 ROOT::TSchemaRule::ReadRawFuncPtr_t fReadRawFunc;
00414
00415 public:
00416
00417
00418
00419 TStreamerArtificial(const char *name, const char *title, Int_t offset, Int_t dtype, const char *typeName) : TStreamerElement(name,title,offset,dtype,typeName), fReadFunc(0), fReadRawFunc(0) {}
00420
00421 void SetReadFunc( ROOT::TSchemaRule::ReadFuncPtr_t val ) { fReadFunc = val; };
00422 void SetReadRawFunc( ROOT::TSchemaRule::ReadRawFuncPtr_t val ) { fReadRawFunc = val; };
00423
00424 ROOT::TSchemaRule::ReadFuncPtr_t GetReadFunc();
00425 ROOT::TSchemaRule::ReadRawFuncPtr_t GetReadRawFunc();
00426
00427 ClassDef(TStreamerArtificial, 0);
00428 };
00429
00430 #endif