12 #ifndef ROOT_TStreamerElement
13 #define ROOT_TStreamerElement
30 class TStreamerBasicType;
31 class TVirtualStreamerInfo;
33 class TStreamerElement :
public TNamed {
36 TStreamerElement(
const TStreamerElement &);
37 TStreamerElement&operator=(
const TStreamerElement&);
51 TMemberStreamer *fStreamer;
60 kSTLstring = ROOT::kSTLstring,
61 kSTLvector = ROOT::kSTLvector,
62 kSTLlist = ROOT::kSTLlist,
63 kSTLforwardlist = ROOT::kSTLforwardlist,
64 kSTLdeque = ROOT::kSTLdeque,
65 kSTLmap = ROOT::kSTLmap,
66 kSTLmultimap = ROOT::kSTLmultimap,
67 kSTLset = ROOT::kSTLset,
68 kSTLmultiset = ROOT::kSTLmultiset,
69 kSTLunorderedset = ROOT::kSTLunorderedset,
70 kSTLunorderedmultiset = ROOT::kSTLunorderedmultiset,
71 kSTLunorderedmap = ROOT::kSTLunorderedmap,
72 kSTLunorderedmultimap = ROOT::kSTLunorderedmultimap,
73 kSTLbitset = ROOT::kSTLbitset
82 kDoNotDelete = BIT(13),
83 kWholeObject = BIT(14),
87 enum class EStatusBitsDupExceptions {
92 kDoNotDelete = TStreamerElement::kDoNotDelete,
98 kHasRange = TStreamerElement::kHasRange
103 TStreamerElement(
const char *name,
const char *title, Int_t offset, Int_t dtype,
const char *typeName);
104 virtual ~TStreamerElement();
105 virtual Bool_t CannotSplit()
const;
106 Int_t GetArrayDim()
const {
return fArrayDim;}
107 Int_t GetArrayLength()
const {
return fArrayLength;}
108 virtual TClass *GetClassPointer()
const;
109 TClass *GetClass()
const {
return GetClassPointer();}
110 virtual Int_t GetExecID()
const;
111 virtual const char *GetFullName()
const;
112 virtual const char *GetInclude()
const {
return "";}
113 Int_t GetMaxIndex(Int_t i)
const {
return fMaxIndex[i];}
114 virtual ULong_t GetMethod()
const {
return ULong_t(fStreamer);}
115 TMemberStreamer *GetStreamer()
const;
116 virtual Int_t GetSize()
const;
117 Int_t GetNewType()
const {
return fNewType;}
118 TClass* GetNewClass()
const {
return fNewClass; }
119 Int_t GetType()
const {
return fType;}
120 Int_t GetOffset()
const {
return fOffset;}
121 void GetSequenceType(TString &type)
const;
122 Int_t GetTObjectOffset()
const {
return fTObjectOffset; }
123 const char *GetTypeName()
const {
return fTypeName.Data();}
124 const char *GetTypeNameBasic()
const;
125 Double_t GetFactor()
const {
return fFactor;}
126 Double_t GetXmin()
const {
return fXmin;}
127 Double_t GetXmax()
const {
return fXmax;}
128 virtual void Init(TVirtualStreamerInfo *obj=0);
129 virtual Bool_t IsaPointer()
const {
return kFALSE;}
130 virtual Bool_t HasCounter()
const {
return kFALSE;}
131 virtual Bool_t IsOldFormat(
const char *newTypeName);
132 virtual Bool_t IsBase()
const;
133 virtual Bool_t IsTransient()
const;
134 virtual void ls(Option_t *option=
"")
const;
135 virtual void SetArrayDim(Int_t dim);
136 virtual void SetMaxIndex(Int_t dim, Int_t max);
137 virtual void SetOffset(Int_t offset) {fOffset=offset;}
138 virtual void SetTObjectOffset(Int_t tobjoffset) {fTObjectOffset=tobjoffset;}
139 virtual void SetStreamer(TMemberStreamer *streamer);
140 virtual void SetSize(Int_t dsize) {fSize = dsize;}
141 virtual void SetNewType(Int_t dtype) {fNewType = dtype;}
142 virtual void SetNewClass( TClass* cl ) { fNewClass= cl; }
143 virtual void SetType(Int_t dtype) {fType = dtype;}
144 virtual void SetTypeName(
const char *name) {fTypeName = name; fClassObject = (TClass*)-1; }
145 virtual void Update(
const TClass *oldClass, TClass *newClass);
147 ClassDef(TStreamerElement,4)
151 class TStreamerBase :
public TStreamerElement {
154 TStreamerBase(
const TStreamerBase &);
155 TStreamerBase&operator=(
const TStreamerBase&);
159 UInt_t &fBaseCheckSum;
161 TClass *fNewBaseClass;
162 ClassStreamerFunc_t fStreamerFunc;
163 ClassConvStreamerFunc_t fConvStreamerFunc;
164 TVirtualStreamerInfo *fStreamerInfo;
167 void InitStreaming();
172 TStreamerBase(
const char *name,
const char *title, Int_t offset);
173 virtual ~TStreamerBase();
174 Int_t GetBaseVersion() {
return fBaseVersion;}
175 UInt_t GetBaseCheckSum() {
return fBaseCheckSum;}
176 virtual TClass *GetClassPointer()
const;
177 const char *GetErrorMessage()
const {
return fErrorMsg; }
178 const char *GetInclude()
const;
179 TClass *GetNewBaseClass() {
return fNewBaseClass; }
180 ULong_t GetMethod()
const {
return 0;}
181 Int_t GetSize()
const;
182 TVirtualStreamerInfo *GetBaseStreamerInfo ()
const {
return fStreamerInfo; }
183 virtual void Init(TVirtualStreamerInfo *obj=0);
184 Bool_t IsBase()
const;
185 virtual void ls(Option_t *option=
"")
const;
186 Int_t ReadBuffer (TBuffer &b,
char *pointer);
187 void SetNewBaseClass( TClass* cl ) { fNewBaseClass = cl; InitStreaming(); }
188 void SetBaseVersion(Int_t v) {fBaseVersion = v;}
189 void SetBaseCheckSum(UInt_t cs) {fBaseCheckSum = cs;}
190 void SetErrorMessage(
const char *msg) { fErrorMsg = msg; }
191 virtual void Update(
const TClass *oldClass, TClass *newClass);
192 Int_t WriteBuffer(TBuffer &b,
char *pointer);
194 ClassDef(TStreamerBase,3)
198 class TStreamerBasicPointer :
public TStreamerElement {
201 TStreamerBasicPointer(
const TStreamerBasicPointer &);
202 TStreamerBasicPointer&operator=(
const TStreamerBasicPointer&);
208 TStreamerBasicType *fCounter;
212 TStreamerBasicPointer();
213 TStreamerBasicPointer(
const char *name,
const char *title, Int_t offset, Int_t dtype,
214 const char *countName,
const char *countClass, Int_t version,
const char *typeName);
215 virtual ~TStreamerBasicPointer();
216 TClass *GetClassPointer()
const {
return 0; }
217 const char *GetCountClass()
const {
return fCountClass.Data();}
218 const char *GetCountName()
const {
return fCountName.Data();}
219 Int_t GetCountVersion()
const {
return fCountVersion;}
220 ULong_t GetMethod()
const;
221 Int_t GetSize()
const;
222 virtual void Init(TVirtualStreamerInfo *obj=0);
223 virtual Bool_t HasCounter()
const {
return fCounter!=0; }
224 virtual Bool_t IsaPointer()
const {
return kTRUE; }
225 void SetArrayDim(Int_t dim);
226 void SetCountClass(
const char *clname) {fCountClass = clname; }
227 void SetCountName(
const char *name) {fCountName = name; }
228 void SetCountVersion(Int_t count) {fCountVersion = count;}
229 virtual void Update(
const TClass * , TClass * ) {}
231 ClassDef(TStreamerBasicPointer,2)
235 class TStreamerLoop :
public TStreamerElement {
238 TStreamerLoop(
const TStreamerLoop&);
239 TStreamerLoop&operator=(
const TStreamerLoop&);
245 TStreamerBasicType *fCounter;
250 TStreamerLoop(
const char *name,
const char *title, Int_t offset,
const char *countName,
const char *countClass, Int_t version,
const char *typeName);
251 virtual ~TStreamerLoop();
252 const char *GetCountClass()
const {
return fCountClass.Data();}
253 const char *GetCountName()
const {
return fCountName.Data();}
254 Int_t GetCountVersion()
const {
return fCountVersion;}
255 const char *GetInclude()
const;
256 ULong_t GetMethod()
const;
257 Int_t GetSize()
const;
258 virtual void Init(TVirtualStreamerInfo *obj=0);
259 virtual Bool_t IsaPointer()
const {
return kTRUE; }
260 virtual Bool_t HasCounter()
const {
return fCounter!=0; }
261 void SetCountClass(
const char *clname) {fCountClass = clname; }
262 void SetCountName(
const char *name) {fCountName = name; }
263 void SetCountVersion(Int_t count) {fCountVersion = count;}
265 ClassDef(TStreamerLoop,2)
269 class TStreamerBasicType :
public TStreamerElement {
272 TStreamerBasicType(
const TStreamerBasicType&);
273 TStreamerBasicType&operator=(
const TStreamerBasicType&);
280 TStreamerBasicType();
281 TStreamerBasicType(
const char *name,
const char *title, Int_t offset, Int_t dtype,
const char *typeName);
282 virtual ~TStreamerBasicType();
283 TClass *GetClassPointer()
const {
return 0; }
284 Int_t GetCounter()
const {
return fCounter;}
285 ULong_t GetMethod()
const;
286 Int_t GetSize()
const;
287 virtual void Update(
const TClass * , TClass * ) {}
289 ClassDef(TStreamerBasicType,2)
293 class TStreamerObject :
public TStreamerElement {
296 TStreamerObject(
const TStreamerObject&);
297 TStreamerObject&operator=(
const TStreamerObject&);
302 TStreamerObject(
const char *name,
const char *title, Int_t offset,
const char *typeName);
303 virtual ~TStreamerObject();
304 const char *GetInclude()
const;
305 Int_t GetSize()
const;
306 virtual void Init(TVirtualStreamerInfo *obj=0);
308 ClassDef(TStreamerObject,2)
312 class TStreamerObjectAny :
public TStreamerElement {
315 TStreamerObjectAny(
const TStreamerObjectAny&);
316 TStreamerObjectAny&operator=(
const TStreamerObjectAny&);
320 TStreamerObjectAny();
321 TStreamerObjectAny(
const char *name,
const char *title, Int_t offset,
const char *typeName);
322 virtual ~TStreamerObjectAny();
323 const char *GetInclude()
const;
324 Int_t GetSize()
const;
325 virtual void Init(TVirtualStreamerInfo *obj=0);
327 ClassDef(TStreamerObjectAny,2)
331 class TStreamerObjectPointer :
public TStreamerElement {
334 TStreamerObjectPointer(
const TStreamerObjectPointer&);
335 TStreamerObjectPointer&operator=(
const TStreamerObjectPointer&);
339 TStreamerObjectPointer();
340 TStreamerObjectPointer(
const char *name,
const char *title, Int_t offset,
const char *typeName);
341 virtual ~TStreamerObjectPointer();
342 const char *GetInclude()
const;
343 Int_t GetSize()
const;
344 virtual void Init(TVirtualStreamerInfo *obj=0);
345 virtual Bool_t IsaPointer()
const {
return kTRUE;}
346 virtual void SetArrayDim(Int_t dim);
348 ClassDef(TStreamerObjectPointer,2)
352 class TStreamerObjectAnyPointer :
public TStreamerElement {
355 TStreamerObjectAnyPointer(
const TStreamerObjectAnyPointer&);
356 TStreamerObjectAnyPointer&operator=(
const TStreamerObjectAnyPointer&);
360 TStreamerObjectAnyPointer();
361 TStreamerObjectAnyPointer(
const char *name,
const char *title, Int_t offset,
const char *typeName);
362 virtual ~TStreamerObjectAnyPointer();
363 const char *GetInclude()
const;
364 Int_t GetSize()
const;
365 virtual void Init(TVirtualStreamerInfo *obj=0);
366 virtual Bool_t IsaPointer()
const {
return kTRUE;}
367 virtual void SetArrayDim(Int_t dim);
369 ClassDef(TStreamerObjectAnyPointer,1)
373 class TStreamerString :
public TStreamerElement {
376 TStreamerString(
const TStreamerString&);
377 TStreamerString&operator=(
const TStreamerString&);
382 TStreamerString(
const char *name,
const char *title, Int_t offset);
383 virtual ~TStreamerString();
384 const char *GetInclude()
const;
385 Int_t GetSize()
const;
387 ClassDef(TStreamerString,2)
391 class TStreamerSTL :
public TStreamerElement {
394 TStreamerSTL(
const TStreamerSTL&);
395 TStreamerSTL&operator=(
const TStreamerSTL&);
404 TStreamerSTL(
const char *name,
const char *title, Int_t offset,
405 const char *typeName,
const char *trueType, Bool_t dmPointer);
406 TStreamerSTL(
const char *name,
const char *title, Int_t offset,
407 const char *typeName,
const TVirtualCollectionProxy &proxy , Bool_t dmPointer);
408 virtual ~TStreamerSTL();
409 Bool_t CannotSplit()
const;
410 Bool_t IsaPointer()
const;
411 Bool_t IsBase()
const;
412 Int_t GetSTLtype()
const {
return fSTLtype;}
413 Int_t GetCtype()
const {
return fCtype;}
414 const char *GetInclude()
const;
415 Int_t GetSize()
const;
416 virtual void ls(Option_t *option=
"")
const;
417 void SetSTLtype(Int_t t) {fSTLtype = t;}
418 void SetCtype(Int_t t) {fCtype = t;}
419 virtual void SetStreamer(TMemberStreamer *streamer);
421 ClassDef(TStreamerSTL,3)
425 class TStreamerSTLstring :
public TStreamerSTL {
428 TStreamerSTLstring(
const TStreamerSTLstring&);
429 TStreamerSTLstring&operator=(
const TStreamerSTLstring&);
433 TStreamerSTLstring();
434 TStreamerSTLstring(
const char *name,
const char *title, Int_t offset,
435 const char *typeName, Bool_t dmPointer);
436 virtual ~TStreamerSTLstring();
437 const char *GetInclude()
const;
438 Int_t GetSize()
const;
440 ClassDef(TStreamerSTLstring,2)
443 class TVirtualObject;
449 class TStreamerArtificial :
public TStreamerElement {
451 TStreamerArtificial(
const TStreamerArtificial&);
452 TStreamerArtificial&operator=(
const TStreamerArtificial&);
455 ROOT::TSchemaRule::ReadFuncPtr_t fReadFunc;
456 ROOT::TSchemaRule::ReadRawFuncPtr_t fReadRawFunc;
462 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) {}
464 void SetReadFunc( ROOT::TSchemaRule::ReadFuncPtr_t val ) { fReadFunc = val; };
465 void SetReadRawFunc( ROOT::TSchemaRule::ReadRawFuncPtr_t val ) { fReadRawFunc = val; };
467 ROOT::TSchemaRule::ReadFuncPtr_t GetReadFunc();
468 ROOT::TSchemaRule::ReadRawFuncPtr_t GetReadRawFunc();
470 ClassDef(TStreamerArtificial, 0);