12 #ifndef ROOT_TVirtualStreamerInfo
13 #define ROOT_TVirtualStreamerInfo
31 class TStreamerElement;
32 class TStreamerBasicType;
33 class TVirtualCollectionProxy;
35 namespace ROOT {
namespace Detail {
class TCollectionProxyInfo; } }
37 class TVirtualStreamerInfo :
public TNamed {
40 Bool_t fOptimized : 1;
42 std::atomic<Bool_t> fIsCompiled;
45 static Bool_t fgCanDelete;
46 static Bool_t fgOptimize;
47 static Bool_t fgStreamMemberWise;
48 static TVirtualStreamerInfo *fgInfoFactory;
50 TVirtualStreamerInfo(
const TVirtualStreamerInfo& info);
51 TVirtualStreamerInfo& operator=(
const TVirtualStreamerInfo&);
53 void ResetIsCompiled() {
55 ResetBit(kIsCompiled);
57 void SetIsCompiled() {
66 kCannotOptimize = BIT(12),
67 kIgnoreTObjectStreamer = BIT(13),
70 kIsCompiled = BIT(16),
71 kBuildOldUsed = BIT(17),
72 kBuildRunning = BIT(18)
75 enum class EStatusBitsDupExceptions {
80 kIgnoreTObjectStreamer = TVirtualStreamerInfo::kIgnoreTObjectStreamer,
84 kBase = 0, kOffsetL = 20, kOffsetP = 40, kCounter = 6, kCharStar = 7,
85 kChar = 1, kShort = 2, kInt = 3, kLong = 4, kFloat = 5,
86 kDouble = 8, kDouble32= 9,
87 kUChar = 11, kUShort = 12, kUInt = 13, kULong = 14, kBits = 15,
88 kLong64 = 16, kULong64 = 17, kBool = 18, kFloat16 = 19,
89 kObject = 61, kAny = 62, kObjectp = 63, kObjectP = 64, kTString = 65,
90 kTObject = 66, kTNamed = 67, kAnyp = 68, kAnyP = 69, kAnyPnoVT = 70,
92 kSkip = 100, kSkipL = 120, kSkipP = 140,
93 kConv = 200, kConvL = 220, kConvP = 240,
94 kSTL = ROOT::kSTLany ,
95 kSTLstring = ROOT::kSTLstring ,
96 kStreamer = 500, kStreamLoop = 501,
101 kNeedObjectForVirtualBaseClass = 99997,
126 TVirtualStreamerInfo();
127 TVirtualStreamerInfo(TClass * );
128 virtual ~TVirtualStreamerInfo();
129 virtual void Build() = 0;
130 virtual void BuildCheck(TFile *file = 0) = 0;
131 virtual void BuildEmulated(TFile *file) = 0;
132 virtual void BuildOld() = 0;
133 virtual Bool_t BuildFor(
const TClass *cl ) = 0;
134 virtual void CallShowMembers(
const void* obj, TMemberInspector &insp, Bool_t isTransient)
const = 0;
135 virtual void Clear(Option_t *) = 0;
136 virtual Bool_t CompareContent(TClass *cl,TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete, TFile *file) = 0;
137 virtual void Compile() = 0;
138 virtual void ForceWriteInfo(TFile *file, Bool_t force=kFALSE) = 0;
139 virtual Int_t GenerateHeaderFile(
const char *dirname,
const TList *subClasses = 0,
const TList *extrainfos = 0) = 0;
140 virtual TClass *GetActualClass(
const void *obj)
const = 0;
141 virtual TClass *GetClass()
const = 0;
142 virtual UInt_t GetCheckSum()
const = 0;
143 virtual Int_t GetClassVersion()
const = 0;
144 virtual TStreamerElement *GetElem(Int_t
id)
const = 0;
145 virtual TStreamerElement *GetElement(Int_t
id)
const = 0;
146 virtual TObjArray *GetElements()
const = 0;
147 virtual Int_t GetOffset(
const char *)
const = 0;
148 virtual Int_t GetOffset(Int_t
id)
const = 0;
149 virtual Int_t GetElementOffset(Int_t
id)
const = 0;
150 virtual Version_t GetOldVersion()
const = 0;
151 virtual Int_t GetOnFileClassVersion()
const = 0;
152 virtual Int_t GetNumber()
const = 0;
153 virtual Int_t GetSize()
const = 0;
154 virtual TStreamerElement *GetStreamerElement(
const char*datamember, Int_t& offset)
const = 0;
155 Bool_t IsBuilt()
const {
return fIsBuilt; }
156 Bool_t IsCompiled()
const {
return fIsCompiled; }
157 Bool_t IsOptimized()
const {
return fOptimized; }
158 Int_t IsRecovered()
const {
return TestBit(kRecovered); }
159 virtual void ls(Option_t *option=
"")
const = 0;
160 virtual TVirtualStreamerInfo *NewInfo(TClass *cl) = 0;
161 virtual void *New(
void *obj = 0) = 0;
162 virtual void *NewArray(Long_t nElements,
void* ary = 0) = 0;
163 virtual void Destructor(
void* p, Bool_t dtorOnly = kFALSE) = 0;
164 virtual void DeleteArray(
void* p, Bool_t dtorOnly = kFALSE) = 0;
166 virtual void SetCheckSum(UInt_t checksum) = 0;
167 virtual void SetClass(TClass *cl) = 0;
168 virtual void SetClassVersion(Int_t vers) = 0;
169 static Bool_t SetStreamMemberWise(Bool_t enable = kTRUE);
170 virtual void TagFile(TFile *fFile) = 0;
171 virtual void Update(
const TClass *oldClass, TClass *newClass) = 0;
173 static const char *GetElementCounterStart(
const char *dmTitle);
174 static TStreamerBasicType *GetElementCounter(
const char *countName, TClass *cl);
176 static Bool_t CanOptimize();
177 static Bool_t GetStreamMemberWise();
178 static void Optimize(Bool_t opt=kTRUE);
179 static Bool_t CanDelete();
180 static void SetCanDelete(Bool_t opt=kTRUE);
181 static void SetFactory(TVirtualStreamerInfo *factory);
183 virtual TVirtualCollectionProxy *GenEmulatedProxy(
const char* class_name, Bool_t silent) = 0;
184 virtual TClassStreamer *GenEmulatedClassStreamer(
const char* class_name, Bool_t silent) = 0;
185 virtual TVirtualCollectionProxy *GenExplicitProxy( const ::ROOT::Detail::TCollectionProxyInfo &info, TClass *cl ) = 0;
186 virtual TClassStreamer *GenExplicitClassStreamer( const ::ROOT::Detail::TCollectionProxyInfo &info, TClass *cl ) = 0;
187 static TVirtualStreamerInfo *Factory();
190 ClassDef(TVirtualStreamerInfo,6)