00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TVirtualStreamerInfo
00013 #define ROOT_TVirtualStreamerInfo
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef ROOT_TNamed
00025 #include "TNamed.h"
00026 #endif
00027
00028 class TFile;
00029 class TClass;
00030 class TObjArray;
00031 class TStreamerElement;
00032 class TStreamerBasicType;
00033 class TVirtualCollectionProxy;
00034 class TClassStreamer;
00035 namespace ROOT { class TCollectionProxyInfo; }
00036
00037 class TVirtualStreamerInfo : public TNamed {
00038
00039 protected:
00040 Bool_t fOptimized;
00041 Bool_t fIsBuilt;
00042
00043 protected:
00044 static Bool_t fgCanDelete;
00045 static Bool_t fgOptimize;
00046 static Bool_t fgStreamMemberWise;
00047 static TVirtualStreamerInfo *fgInfoFactory;
00048
00049 TVirtualStreamerInfo(const TVirtualStreamerInfo& info);
00050 TVirtualStreamerInfo& operator=(const TVirtualStreamerInfo&);
00051
00052 public:
00053
00054
00055 enum { kCannotOptimize = BIT(12),
00056 kIgnoreTObjectStreamer = BIT(13),
00057 kRecovered = BIT(14),
00058 kNeedCheck = BIT(15),
00059 kIsCompiled = BIT(16)
00060 };
00061
00062 enum EReadWrite {
00063 kBase = 0, kOffsetL = 20, kOffsetP = 40, kCounter = 6, kCharStar = 7,
00064 kChar = 1, kShort = 2, kInt = 3, kLong = 4, kFloat = 5,
00065 kDouble = 8, kDouble32= 9,
00066 kUChar = 11, kUShort = 12, kUInt = 13, kULong = 14, kBits = 15,
00067 kLong64 = 16, kULong64 = 17, kBool = 18, kFloat16 = 19,
00068 kObject = 61, kAny = 62, kObjectp = 63, kObjectP = 64, kTString = 65,
00069 kTObject = 66, kTNamed = 67, kAnyp = 68, kAnyP = 69, kAnyPnoVT = 70,
00070 kSTLp = 71,
00071 kSkip = 100, kSkipL = 120, kSkipP = 140,
00072 kConv = 200, kConvL = 220, kConvP = 240,
00073 kSTL = 300, kSTLstring = 365,
00074 kStreamer = 500, kStreamLoop = 501,
00075 kCache = 600,
00076 kArtificial = 1000,
00077 kCacheNew = 1001,
00078 kCacheDelete = 1002,
00079 kMissing = 99999
00080 };
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 TVirtualStreamerInfo();
00104 TVirtualStreamerInfo(TClass * );
00105 virtual ~TVirtualStreamerInfo();
00106 virtual void Build() = 0;
00107 virtual void BuildCheck() = 0;
00108 virtual void BuildEmulated(TFile *file) = 0;
00109 virtual void BuildOld() = 0;
00110 virtual Bool_t BuildFor( const TClass *cl ) = 0;
00111 virtual void CallShowMembers(void* obj, TMemberInspector &insp) const = 0;
00112 virtual void Clear(Option_t *) = 0;
00113 virtual Bool_t CompareContent(TClass *cl,TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete) = 0;
00114 virtual void Compile() = 0;
00115 virtual void ForceWriteInfo(TFile *file, Bool_t force=kFALSE) = 0;
00116 virtual Int_t GenerateHeaderFile(const char *dirname, const TList *subClasses = 0, const TList *extrainfos = 0) = 0;
00117 virtual TClass *GetActualClass(const void *obj) const = 0;
00118 virtual TClass *GetClass() const = 0;
00119 virtual UInt_t GetCheckSum() const = 0;
00120 virtual Int_t GetClassVersion() const = 0;
00121 virtual ULong_t *GetElems() const = 0;
00122 virtual TObjArray *GetElements() const = 0;
00123 virtual Int_t GetOffset(const char *) const = 0;
00124 virtual Int_t *GetOffsets() const = 0;
00125 virtual Version_t GetOldVersion() const = 0;
00126 virtual Int_t GetOnFileClassVersion() const = 0;
00127 virtual Int_t GetNumber() const = 0;
00128 virtual Int_t GetSize() const = 0;
00129 virtual TStreamerElement *GetStreamerElement(const char*datamember, Int_t& offset) const = 0;
00130 Bool_t IsBuilt() const { return fIsBuilt; }
00131 Bool_t IsCompiled() const { return TestBit(kIsCompiled); }
00132 Bool_t IsOptimized() const { return fOptimized; }
00133 Int_t IsRecovered() const { return TestBit(kRecovered); }
00134 virtual void ls(Option_t *option="") const = 0;
00135 virtual TVirtualStreamerInfo *NewInfo(TClass *cl) = 0;
00136 virtual void *New(void *obj = 0) = 0;
00137 virtual void *NewArray(Long_t nElements, void* ary = 0) = 0;
00138 virtual void Destructor(void* p, Bool_t dtorOnly = kFALSE) = 0;
00139 virtual void DeleteArray(void* p, Bool_t dtorOnly = kFALSE) = 0;
00140
00141 virtual void SetCheckSum(UInt_t checksum) = 0;
00142 virtual void SetClass(TClass *cl) = 0;
00143 virtual void SetClassVersion(Int_t vers) = 0;
00144 static Bool_t SetStreamMemberWise(Bool_t enable = kTRUE);
00145 virtual void TagFile(TFile *fFile) = 0;
00146 virtual void Update(const TClass *oldClass, TClass *newClass) = 0;
00147
00148 static TStreamerBasicType *GetElementCounter(const char *countName, TClass *cl);
00149
00150 static Bool_t CanOptimize();
00151 static Bool_t GetStreamMemberWise();
00152 static void Optimize(Bool_t opt=kTRUE);
00153 static Bool_t CanDelete();
00154 static void SetCanDelete(Bool_t opt=kTRUE);
00155 static void SetFactory(TVirtualStreamerInfo *factory);
00156
00157 virtual TVirtualCollectionProxy *GenEmulatedProxy(const char* class_name) = 0;
00158 virtual TClassStreamer *GenEmulatedClassStreamer(const char* class_name) = 0;
00159 virtual TVirtualCollectionProxy *GenExplicitProxy( const ::ROOT::TCollectionProxyInfo &info, TClass *cl ) = 0;
00160 virtual TClassStreamer *GenExplicitClassStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl ) = 0;
00161 static TVirtualStreamerInfo *Factory();
00162
00163
00164 ClassDef(TVirtualStreamerInfo,6)
00165 };
00166
00167 #endif