A TStreamerInfo object describes a persistent version of a class. A ROOT file contains the list of TStreamerInfo objects for all the class versions written to this file. When reading a file, all the TStreamerInfo objects are read back in memory and registered to the TClass list of TStreamerInfo. One can see the list and contents of the TStreamerInfo on a file with, eg, TFile f("myfile.root"); f.ShowStreamerInfo(); A TStreamerInfo is a list of TStreamerElement objects (one per data member or base class). When streaming an object, the system (TClass) loops on all the TStreamerElement objects and calls teh appropriate function for each element type.
TStreamerInfo() | |
TStreamerInfo(TClass* cl) | |
virtual | ~TStreamerInfo() |
void | TObject::AbstractMethod(const char* method) const |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual void | TObject::Browse(TBrowser* b) |
virtual void | Build() |
virtual void | BuildCheck() |
virtual void | BuildEmulated(TFile* file) |
virtual Bool_t | BuildFor(const TClass* cl) |
virtual void | BuildOld() |
static Bool_t | TVirtualStreamerInfo::CanDelete() |
static Bool_t | TVirtualStreamerInfo::CanOptimize() |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | Clear(Option_t*) |
virtual TObject* | TNamed::Clone(const char* newname = "") const |
virtual Int_t | TNamed::Compare(const TObject* obj) const |
virtual void | Compile() |
void | ComputeSize() |
virtual void | TNamed::Copy(TObject& named) const |
virtual void | TObject::Delete(Option_t* option = "")MENU |
virtual void | DeleteArray(void* p, Bool_t dtorOnly = kFALSE) |
virtual void | Destructor(void* p, Bool_t dtorOnly = kFALSE) |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() constMENU |
virtual TObject* | TObject::DrawClone(Option_t* option = "") constMENU |
virtual void | TObject::Dump() constMENU |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
static TVirtualStreamerInfo* | TVirtualStreamerInfo::Factory() |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
virtual void | TNamed::FillBuffer(char*& buffer) |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
virtual void | ForceWriteInfo(TFile* file, Bool_t force = kFALSE) |
virtual TClassStreamer* | GenEmulatedClassStreamer(const char* class_name) |
virtual TVirtualCollectionProxy* | GenEmulatedProxy(const char* class_name) |
virtual Int_t | GenerateHeaderFile(const char* dirname, const TList* subClasses = 0) |
virtual TClassStreamer* | GenExplicitClassStreamer(const ROOT::TCollectionProxyInfo& info, TClass* cl) |
virtual TVirtualCollectionProxy* | GenExplicitProxy(const ROOT::TCollectionProxyInfo& info, TClass* cl) |
virtual UInt_t | GetCheckSum() const |
UInt_t | GetCheckSum(UInt_t code) const |
virtual TClass* | GetClass() const |
virtual Int_t | GetClassVersion() const |
static TStreamerElement* | GetCurrentElement() |
Int_t | GetDataMemberOffset(TDataMember* dm, TMemberStreamer*& streamer) const |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
static TStreamerBasicType* | TVirtualStreamerInfo::GetElementCounter(const char* countName, TClass* cl) |
virtual TObjArray* | GetElements() const |
virtual ULong_t* | GetElems() const |
virtual const char* | TObject::GetIconName() const |
Int_t* | GetLengths() const |
ULong_t* | GetMethods() const |
virtual const char* | TNamed::GetName() const |
Int_t | GetNdata() const |
Int_t* | GetNewTypes() const |
virtual Int_t | GetNumber() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Int_t | GetOffset(const char*) const |
virtual Int_t* | GetOffsets() const |
virtual Version_t | GetOldVersion() const |
virtual Int_t | GetOnFileClassVersion() const |
virtual Option_t* | TObject::GetOption() const |
virtual Int_t | GetSize() const |
Int_t | GetSizeElements() const |
virtual TStreamerElement* | GetStreamerElement(const char* datamember, Int_t& offset) const |
TStreamerElement* | GetStreamerElementReal(Int_t i, Int_t j) const |
static Bool_t | TVirtualStreamerInfo::GetStreamMemberWise() |
virtual const char* | TNamed::GetTitle() const |
Int_t* | GetTypes() const |
virtual UInt_t | TObject::GetUniqueID() const |
Double_t | GetValue(char* pointer, Int_t i, Int_t j, Int_t len) const |
Double_t | GetValueClones(TClonesArray* clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const |
Double_t | GetValueSTL(TVirtualCollectionProxy* cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const |
Double_t | GetValueSTLP(TVirtualCollectionProxy* cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TNamed::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
virtual void | TObject::Inspect() constMENU |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | IsBuilt() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | TObject::IsFolder() const |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | IsOptimized() const |
virtual Int_t | IsRecovered() const |
virtual Bool_t | TNamed::IsSortable() const |
Bool_t | TObject::IsZombie() const |
virtual void | ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual void* | New(void* obj = 0) |
virtual void* | NewArray(Long_t nElements, void* ary = 0) |
virtual TVirtualStreamerInfo* | NewInfo(TClass* cl) |
virtual Bool_t | TObject::Notify() |
static void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::operator delete[](void* ptr, void* vp) |
void* | TObject::operator new(size_t sz) |
void* | TObject::operator new(size_t sz, void* vp) |
void* | TObject::operator new[](size_t sz) |
void* | TObject::operator new[](size_t sz, void* vp) |
static void | TVirtualStreamerInfo::Optimize(Bool_t opt = kTRUE) |
virtual void | TObject::Paint(Option_t* option = "") |
virtual void | TObject::Pop() |
virtual void | TNamed::Print(Option_t* option = "") const |
void | PrintValue(const char* name, char* pointer, Int_t i, Int_t len, Int_t lenmax = 1000) const |
void | PrintValueClones(const char* name, TClonesArray* clones, Int_t i, Int_t eoffset, Int_t lenmax = 1000) const |
void | PrintValueSTL(const char* name, TVirtualCollectionProxy* cont, Int_t i, Int_t eoffset, Int_t lenmax = 1000) const |
virtual Int_t | TObject::Read(const char* name) |
Int_t | ReadBufferClones(TBuffer& b, TClonesArray* clones, Int_t nc, Int_t first, Int_t eoffset) |
Int_t | ReadBufferSTL(TBuffer& b, TVirtualCollectionProxy* cont, Int_t nc, Int_t first, Int_t eoffset) |
Int_t | ReadBufferSTLPtrs(TBuffer& b, TVirtualCollectionProxy* cont, Int_t nc, Int_t first, Int_t eoffset) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
void | TObject::ResetBit(UInt_t f) |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU |
virtual void | TObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "") |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
static void | TVirtualStreamerInfo::SetCanDelete(Bool_t opt = kTRUE) |
virtual void | SetCheckSum(UInt_t checksum) |
virtual void | SetClass(TClass* cl) |
virtual void | SetClassVersion(Int_t vers) |
virtual void | TObject::SetDrawOption(Option_t* option = "")MENU |
static void | TObject::SetDtorOnly(void* obj) |
static void | TVirtualStreamerInfo::SetFactory(TVirtualStreamerInfo* factory) |
virtual void | TNamed::SetName(const char* name)MENU |
virtual void | TNamed::SetNameTitle(const char* name, const char* title) |
static void | TObject::SetObjectStat(Bool_t stat) |
static Bool_t | TVirtualStreamerInfo::SetStreamMemberWise(Bool_t enable = kTRUE) |
virtual void | TNamed::SetTitle(const char* title = "")MENU |
virtual void | TObject::SetUniqueID(UInt_t uid) |
virtual void | ShowMembers(TMemberInspector& insp, char* parent) |
virtual Int_t | TNamed::Sizeof() const |
virtual void | Streamer(TBuffer& b) |
void | StreamerNVirtual(TBuffer& b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
virtual void | TagFile(TFile* fFile) |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | Update(const TClass* oldClass, TClass* newClass) |
virtual void | TObject::UseCurrentStyle() |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
Int_t | WriteBuffer(TBuffer& b, char* pointer, Int_t first) |
Int_t | WriteBufferClones(TBuffer& b, TClonesArray* clones, Int_t nc, Int_t first, Int_t eoffset) |
Int_t | WriteBufferSTL(TBuffer& b, TVirtualCollectionProxy* cont, Int_t nc, Int_t first, Int_t eoffset) |
Int_t | WriteBufferSTLPtrs(TBuffer& b, TVirtualCollectionProxy* cont, Int_t nc, Int_t first, Int_t eoffset) |
virtual void | TObject::DoError(int level, const char* location, const char* fmt, va_list va) const |
void | TObject::MakeZombie() |
TStreamerInfo(const TStreamerInfo&) | |
void | GenerateDeclaration(FILE* fp, FILE* sfp, const TList* subClasses, Bool_t top = kTRUE) |
UInt_t | GenerateIncludes(FILE* fp, char* inclist) |
static Double_t | GetValueAux(Int_t type, void* ladd, int k, Int_t len) |
void | InsertArtificialElements(const TObjArray* rules) |
TStreamerInfo& | operator=(const TStreamerInfo&) |
static void | PrintValueAux(char* ladd, Int_t atype, TStreamerElement* aElement, Int_t aleng, Int_t* count) |
enum { | kCannotOptimize | |
kIgnoreTObjectStreamer | ||
kRecovered | ||
kNeedCheck | ||
}; | ||
enum EReadWrite { | kBase | |
kOffsetL | ||
kOffsetP | ||
kCounter | ||
kCharStar | ||
kChar | ||
kShort | ||
kInt | ||
kLong | ||
kFloat | ||
kDouble | ||
kDouble32 | ||
kUChar | ||
kUShort | ||
kUInt | ||
kULong | ||
kBits | ||
kLong64 | ||
kULong64 | ||
kBool | ||
kFloat16 | ||
kObject | ||
kAny | ||
kObjectp | ||
kObjectP | ||
kTString | ||
kTObject | ||
kTNamed | ||
kAnyp | ||
kAnyP | ||
kAnyPnoVT | ||
kSTLp | ||
kSkip | ||
kSkipL | ||
kSkipP | ||
kConv | ||
kConvL | ||
kConvP | ||
kSTL | ||
kSTLstring | ||
kStreamer | ||
kStreamLoop | ||
kCache | ||
kArtificial | ||
kCacheNew | ||
kCacheDelete | ||
kMissing | ||
}; | ||
enum TVirtualStreamerInfo::[unnamed] { | kCannotOptimize | |
kIgnoreTObjectStreamer | ||
kRecovered | ||
kNeedCheck | ||
}; | ||
enum TVirtualStreamerInfo::EReadWrite { | kBase | |
kOffsetL | ||
kOffsetP | ||
kCounter | ||
kCharStar | ||
kChar | ||
kShort | ||
kInt | ||
kLong | ||
kFloat | ||
kDouble | ||
kDouble32 | ||
kUChar | ||
kUShort | ||
kUInt | ||
kULong | ||
kBits | ||
kLong64 | ||
kULong64 | ||
kBool | ||
kFloat16 | ||
kObject | ||
kAny | ||
kObjectp | ||
kObjectP | ||
kTString | ||
kTObject | ||
kTNamed | ||
kAnyp | ||
kAnyP | ||
kAnyPnoVT | ||
kSTLp | ||
kSkip | ||
kSkipL | ||
kSkipP | ||
kConv | ||
kConvL | ||
kConvP | ||
kSTL | ||
kSTLstring | ||
kStreamer | ||
kStreamLoop | ||
kCache | ||
kArtificial | ||
kCacheNew | ||
kCacheDelete | ||
kMissing | ||
}; | ||
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
TString | TNamed::fName | object identifier |
TString | TNamed::fTitle | object title |
static Bool_t | TVirtualStreamerInfo::fgCanDelete | True if ReadBuffer can delete object |
static TVirtualStreamerInfo* | TVirtualStreamerInfo::fgInfoFactory | |
static Bool_t | TVirtualStreamerInfo::fgOptimize | True if optimization on |
static Bool_t | TVirtualStreamerInfo::fgStreamMemberWise | True if the collections are to be stream "member-wise" (when possible). |
UInt_t | fCheckSum | checksum of original class |
TClass* | fClass | !pointer to class |
Int_t | fClassVersion | Class version identifier |
TStreamerInfo::TCompInfo* | fComp | ![fNdata] additional info |
ULong_t* | fElem | ![fNdata] |
TObjArray* | fElements | Array of TStreamerElements |
Bool_t | fIsBuilt | ! true if the TStreamerInfo has been 'built' |
Int_t* | fLength | ![fNdata] |
ULong_t* | fMethod | ![fNdata] |
Int_t | fNdata | !number of optmized types |
Int_t* | fNewType | ![fNdata] |
Int_t | fNumber | !Unique identifier |
Int_t* | fOffset | ![fNdata] |
Version_t | fOldVersion | ! Version of the TStreamerInfo object read from the file |
Int_t | fOnFileClassVersion | !Class version identifier as stored on file. |
Bool_t | fOptimized | ! true if has been optimized |
Int_t | fSize | !size of the persistent class |
Int_t* | fType | ![fNdata] |
static Int_t | fgCount | Number of TStreamerInfo instances |
static TStreamerElement* | fgElement | Pointer to current TStreamerElement |
Build the I/O data structure for the current class version. A list of TStreamerElement derived classes is built by scanning one by one the list of data members of the analyzed class.
Check if built and consistent with the class dictionary. This method is called by TFile::ReadStreamerInfo.
Check if we can build this for foreign class - do we have some rules to do that
loop on the TStreamerElement list regroup members with same type Store predigested information into local arrays. This saves a huge amount of time compared to an explicit iteration on all elements.
-- Recursively mark streamer infos for writing to a file. Will force this TStreamerInfo to the file and also all the dependencies. If argument force > 0 the loop on class dependencies is forced. This function is called when streaming a class that contains a null pointer. In this case, the TStreamerInfo for the class with the null pointer must be written to the file and also all the TStreamerInfo of all the classes referenced by the class. -- We must be given a file to write to.
Recalculate the checksum of this TStreamerInfo based on its code. The class ckecksum is used by the automatic schema evolution algorithm to uniquely identify a class version. The check sum is built from the names/types of base classes and data members. Algorithm from Victor Perevovchikov (perev@bnl.gov). if code==1 data members of type enum are not counted in the checksum if code==2 return the checksum of data members and base classes, not including the ranges and array size found in comments. This is needed for backward compatibility. WARNING: this function must be kept in sync with TClass::GetCheckSum. They are both used to handle backward compatibility and should both return the same values. TStreamerInfo uses the information in TStreamerElement while TClass uses the information from TClass::GetListOfBases and TClass::GetListOfDataMembers.
Write the Declaration of class.
Add to the header file, the #include need for this class
Generate header file for the class described by this TStreamerInfo the function is called by TFile::MakeProject for each class in the file
static function returning a pointer to the current TStreamerElement fgElement points to the current TStreamerElement being read in ReadBuffer
Compute data member offset return pointer to the Streamer function if one exists
return the offset of the data member as indicated by this StreamerInfo
return total size of all persistent elements of the class use GetSize if you want to get the real size in memory
Return the StreamerElement of "datamember" inside our
class or any of its base classes. The offset information
contained in the StreamerElement is related to its immediately
containing class, so we return in 'offset' the offset inside
our class.
TStreamerInfo holds two types of data structures -TObjArray* fElements; containing the list of all TStreamerElement objects for this class version. -ULong_t* fElem; containing the preprocessed information by TStreamerInfo::Compile In case consecutive data members are of the same type, the Compile function declares the consecutive elements as one single element in fElems. example with the class TAttLine TClass::GetClass("TAttLine")->GetStreamerInfo()->ls(); produces; StreamerInfo for class: TAttLine, version=1 short fLineColor offset= 4 type= 2 line color short fLineStyle offset= 6 type= 2 line style short fLineWidth offset= 8 type= 2 line width i= 0, fLineColor type= 22, offset= 4, len=3, method=0 For I/O implementations (eg. XML) , one has to know the original name of the data member. This function can be used to return a pointer to the original TStreamerElement object corresponding to the j-th element of a compressed array in fElems. parameters description: - i: the serial number in array fElem - j: the element number in the array of consecutive types In the above example the class TAttLine has 3 consecutive data members of the same type "short". Compile makes one single array of 3 elements. To access the TStreamerElement for the second element of this array, one can call: TStreamerElement *el = GetStreamerElementReal(0,1); const char* membername = el->GetName(); This function is typically called from Tbuffer, TXmlBuffer
Get the value from inside a collection.
return value of element i in object at pointer. The function may be called in two ways: -method1 len < 0 i is assumed to be the TStreamerElement number i in StreamerInfo -method2 len >= 0 i is the type address of variable is directly pointer.
return value of element i in object number j in a TClonesArray and eventually element k in a sub-array.
return value of element i in object number j in a TClonesArray and eventually element k in a sub-array.
return value of element i in object number j in a TClonesArray and eventually element k in a sub-array.
Insert new members as expressed in the array of TSchemaRule(s).
An emulated object is created at address obj, if obj is null we allocate memory for the object.
An array of emulated objects is created at address ary, if ary is null, we allocate memory for the array.
emulated destructor for this class. An emulated object is destroyed at address p
Destroy an array of emulated objects, with optional delete.
print value of element i in object at pointer The function may be called in two ways: -method1 len < 0 i is assumed to be the TStreamerElement number i in StreamerInfo -method2 len >= 0 i is the type address of variable is directly pointer. len is the number of elements to be printed starting at pointer.
print value of element i in a TClonesArray
print value of element i in a TClonesArray
print value of element in object at pointer, type atype, leng aleng or *count The function may be called in two ways: -method1 len < 0 i is assumed to be the TStreamerElement number i in StreamerInfo -method2 len >= 0 i is the type address of variable is directly pointer. len is the number of elements to be printed starting at pointer.
function called by the TClass constructor when replacing an emulated class by the real class
Generate emulated class streamer for a given collection class.
Generate proxy from static functions.
Generate class streamer from static functions.