29 #include "Compression.h"
48 #ifdef R__VISUAL_CPLUSPLUS
49 #define FLong64 "%I64d"
50 #define FULong64 "%I64u"
52 #define FLong64 "%lld"
53 #define FULong64 "%llu"
75 fExpectedBaseClass(0),
96 fExpectedBaseClass(0),
123 fExpectedBaseClass(0),
168 return ConvertToXML(obj, obj ? obj->IsA() : 0, GenericLayout, UseNamespaces);
206 if ((cl==0) || (obj==0))
return 0;
215 return (
TObject*) ( ( (
char*)obj ) + delta );
250 if (
fXML==0)
return 0;
264 if (node==0)
return 0;
269 if (
fXML==0)
return 0;
295 class TXMLStackObj :
public TObject {
303 fCompressedClassNode(
kFALSE),
309 virtual ~TXMLStackObj()
311 if (fIsElemOwner)
delete fElem;
314 Bool_t IsStreamerInfo()
const {
return fIsStreamerInfo; }
320 Bool_t fCompressedClassNode;
336 TXMLStackObj* stack =
new TXMLStackObj(current);
352 return dynamic_cast<TXMLStackObj*
> (
fStack.
Last());
360 TXMLStackObj* stack = 0;
371 TXMLStackObj* stack =
dynamic_cast<TXMLStackObj*
> (
fStack.
Last());
372 return (stack==0) ? 0 : stack->fNode;
380 TXMLStackObj* stack =
dynamic_cast<TXMLStackObj*
> (
fStack.
Last());
392 if (algorithm < 0 || algorithm >= ROOT::kUndefinedCompressionAlgorithm) algorithm = 0;
407 if (level < 0) level = 0;
408 if (level > 99) level = 99;
414 if (algorithm >= ROOT::kUndefinedCompressionAlgorithm) algorithm = 0;
435 if ((node==0) || (
Length()==0))
return;
437 const char* src =
Buffer();
440 char* fZipBuffer = 0;
445 if ((
Length() > 512) && (compressionLevel > 0)) {
446 int zipBufferSize =
Length();
447 fZipBuffer =
new char[zipBufferSize + 9];
449 int compressedSize = 0;
450 R__zipMultipleAlgorithm(compressionLevel, &dataSize,
Buffer(), &zipBufferSize,
451 fZipBuffer, &compressedSize, compressionAlgorithm);
452 if (compressedSize > 0) {
454 srcSize = compressedSize;
467 while (srcCnt++<srcSize) {
468 tgt+=sprintf(tgt,
" %02x", (
unsigned char) *src);
477 if (block>0) res += sbuf;
493 if (blocknode==0)
return;
497 char* fUnzipBuffer = 0;
500 Info(
"XmlReadBlock",
"Block size = %d, Length = %d, Compressed = %d",
501 blockSize,
Length(), blockCompressed);
506 Int_t readSize = blockSize;
510 if (blockCompressed) {
512 fUnzipBuffer =
new char[zipSize];
518 char* ptr = (
char*) content.
Data();
521 Info(
"XmlReadBlock",
"Content %s", ptr);
523 for (
int i=0;i<readSize;i++) {
524 while ((*ptr<48) || ((*ptr>57) && (*ptr<97)) || (*ptr>102)) ptr++;
526 int b_hi = (*ptr>57) ? *ptr-87 : *ptr-48;
528 int b_lo = (*ptr>57) ? *ptr-87 : *ptr-48;
534 if (
gDebug>4)
Info(
"XmlReadBlock",
" Buf[%d] = %d", i, b_hi*16+b_lo);
545 R__unzip(&readSize, (
unsigned char*) fUnzipBuffer, &blockSize,
546 (
unsigned char*)
Buffer(), &unzipRes);
548 if (status != 0 || unzipRes!=blockSize)
549 Error(
"XmlReadBlock",
"Decompression error %d", unzipRes);
551 if (
gDebug>2)
Info(
"XmlReadBlock",
"Unzip ok");
552 delete[] fUnzipBuffer;
563 if (node==0)
return kFALSE;
575 if (refnode==0)
return kFALSE;
588 if (refvalue.
Length()>0) {
602 if ((node==0) || (ptr==0))
return;
624 if (ptrid==0)
return kFALSE;
648 if ((node==0) || (ptr==0))
return;
652 if (refid==0)
return;
666 Info(
"ExtractReference",
"Find reference %s for object %p", refid, ptr);
674 if ((name==0) || (node==0))
return kFALSE;
678 Error(
"VerifyNode",
"Reading XML file (%s). Get: %s, expects: %s",
701 if ((node==0) || (name==0) || (value==0))
return kFALSE;
703 if (((cont==0) || (strcmp(cont, value)!=0))) {
705 Error(
"VerifyAttr",
"%s : attr %s = %s, expected: %s", errinfo, name, cont, value);
773 TXMLStackObj* curr =
PushStack(elemnode);
818 ((
TClass*)cl)->Streamer((
void*)obj, *
this);
823 Info(
"XmlWriteObject",
"Done write for class: %s", cl ? cl->
GetName() :
"null");
839 if (objnode==0)
return obj;
847 if (cl) *cl = objClass;
856 Error(
"XmlReadObject",
"Cannot find class %s", clname.
Data());
862 Info(
"XmlReadObject",
"Reading object of class %s", clname.
Data());
864 if (obj==0) obj = objClass->
New();
870 objClass->
Streamer((
void*)obj, *
this);
877 Info(
"XmlReadObject",
"Reading object of class %s done", clname.
Data());
879 if (cl) *cl = objClass;
903 if (sinfo!=0) cl = sinfo->
GetClass();
914 TXMLStackObj* stack =
Stack();
919 if (compressClassNode) {
940 if (!compressClassNode) {
950 stack->fCompressedClassNode = compressClassNode;
951 stack->fInfo = sinfo;
952 stack->fIsStreamerInfo =
kTRUE;
969 TXMLStackObj* stack =
Stack();
971 if (!stack->IsStreamerInfo()) {
976 if (stack->fCompressedClassNode) {
978 stack->fIsStreamerInfo =
kFALSE;
979 stack->fCompressedClassNode =
kFALSE;
1010 TXMLStackObj* stack =
Stack();
1012 Error(
"SetStreamerElementNumber",
"stack is empty");
1016 if (!stack->IsStreamerInfo()) {
1020 stack =
dynamic_cast<TXMLStackObj*
> (
fStack.
Last());
1024 Error(
"SetStreamerElementNumber",
"Lost of stack");
1029 Error(
"SetStreamerElementNumber",
"Problem in Inc/Dec level");
1035 if (!stack->IsStreamerInfo()) {
1036 Error(
"SetStreamerElementNumber",
"Problem in Inc/Dec level");
1041 if (
gDebug>4)
Info(
"SetStreamerElementNumber",
" Next element %s", elem->
GetName());
1048 Info(
"SetStreamerElementNumber",
1049 " Expects chain for elem %s number %d",
1062 Info(
"SetStreamerElementNumber",
1063 " Expects base class %s with standard streamer",
1073 stack->fElemNumber = number;
1074 stack->fIsElemOwner = (number<0);
1141 if (typeName==0) typeName =
name;
1143 if ((name==0) || (strlen(name)==0)) {
1144 Error(
"ClassMember",
"Invalid member name");
1151 Int_t typ_id(-1), comp_type(-1);
1153 if (strcmp(typeName,
"raw:data")==0)
1164 if (strcmp(name, typeName)==0) {
1171 if (tname[tname.
Length()-1]==
'*') {
1177 Error(
"ClassMember",
"Invalid class specifier %s", typeName);
1206 if ((typ_id>0) && (typ_id<20)) {
1234 Error(
"ClassMember",
"Invalid combination name = %s type = %s", name, typeName);
1260 if ((elem==0) || (elemnode==0))
return;
1272 if (nodestring)
return;
1276 if (nodeuchar)
return;
1280 if (nodeint)
return;
1284 if (nodecharstar!=0)
return;
1285 nodecharstar = node;
1293 if (nodeuchar==0)
return;
1294 if (nodecharstar!=0)
1323 if (idnode==0) idnode = node;
else
1324 if (bitsnode==0) bitsnode = node;
else return;
1333 if ((vnode==0) || (idnode==0) || (bitsnode==0))
return;
1340 sscanf(str.
Data(),
"%u", &bits);
1343 snprintf(sbuf,
sizeof(sbuf),
"%x",bits);
1365 if ((elem==0) || (elemnode==0))
return;
1377 snprintf(sbuf,
sizeof(sbuf),
"%d", len);
1395 if (!
fXML->
HasAttr(elemnode,
"fUniqueID"))
return;
1413 sscanf(bitsstr.
Data(),
"%x", &bits);
1415 snprintf(sbuf,
sizeof(sbuf),
"%u", bits);
1441 const char* clname = 0;
1447 if (
gDebug>2)
Info(
"ReadClass",
"Try to read class %s", clname ? clname :
"---");
1449 return clname ?
gROOT->GetClass(clname) : 0;
1502 if (start) *start = 0;
1503 if (bcnt) *bcnt = 0;
1514 Error(
"ReadVersion",
"No correspondent tags to read version");;
1518 if (
gDebug>2)
Info(
"ReadVersion",
"Version = %d", res);
1552 Info(
"WriteVersion",
"Class: %s, version = %d",
1586 Info(
"WriteObject",
"Class %s", (actualClass ? actualClass->
GetName() :
" null"));
1591 #define TXMLReadArrayNoncompress(vname) \
1593 for(Int_t indx=0;indx<n;indx++) \
1594 XmlReadBasic(vname[indx]); \
1598 #define TXMLReadArrayContent(vname, arrsize) \
1601 while(indx<arrsize) { \
1603 if (fXML->HasAttr(StackNode(), xmlio::cnt)) \
1604 cnt = fXML->GetIntAttr(StackNode(), xmlio::cnt); \
1605 XmlReadBasic(vname[indx]); \
1606 Int_t curr = indx; indx++; \
1608 vname[indx] = vname[curr]; \
1615 #define TBufferXML_ReadArray(tname, vname) \
1617 BeforeIOoperation(); \
1618 if (!VerifyItemNode(xmlio::Array,"ReadArray")) return 0; \
1619 Int_t n = fXML->GetIntAttr(StackNode(), xmlio::Size); \
1620 if (n<=0) return 0; \
1621 if (!vname) vname = new tname[n]; \
1622 PushStack(StackNode()); \
1623 TXMLReadArrayContent(vname, n); \
1625 ShiftStack("readarr"); \
1830 #define TBufferXML_ReadStaticArray(vname) \
1832 BeforeIOoperation(); \
1833 if (!VerifyItemNode(xmlio::Array,"ReadStaticArray")) return 0; \
1834 Int_t n = fXML->GetIntAttr(StackNode(), xmlio::Size); \
1835 if (n<=0) return 0; \
1836 if (!vname) return 0; \
1837 PushStack(StackNode()); \
1838 TXMLReadArrayContent(vname, n); \
1840 ShiftStack("readstatarr"); \
1967 #define TBufferXML_ReadFastArray(vname) \
1969 BeforeIOoperation(); \
1971 TStreamerElement* elem = Stack(0)->fElem; \
1972 if ((elem!=0) && (elem->GetType()>TStreamerInfo::kOffsetL) && \
1973 (elem->GetType()<TStreamerInfo::kOffsetP) && \
1974 (elem->GetArrayLength()!=n)) fExpectedChain = kTRUE; \
1975 if (fExpectedChain) { \
1976 fExpectedChain = kFALSE; \
1977 Int_t startnumber = Stack(0)->fElemNumber; \
1978 TStreamerInfo* info = Stack(1)->fInfo; \
1981 elem = (TStreamerElement*)info->GetElements()->At(startnumber++); \
1982 if (elem->GetType()<TStreamerInfo::kOffsetL) { \
1983 if (index>0) { PopStack(); ShiftStack("chainreader"); VerifyElemNode(elem); } \
1984 fCanUseCompact = kTRUE; \
1985 XmlReadBasic(vname[index]); \
1988 if (!VerifyItemNode(xmlio::Array,"ReadFastArray")) return; \
1989 PushStack(StackNode()); \
1990 Int_t elemlen = elem->GetArrayLength(); \
1991 TXMLReadArrayContent((vname+index), elemlen); \
1993 ShiftStack("readfastarr"); \
1998 if (!VerifyItemNode(xmlio::Array,"ReadFastArray")) return; \
1999 PushStack(StackNode()); \
2000 TXMLReadArrayContent(vname, n); \
2002 ShiftStack("readfastarr"); \
2023 Int_t size = strlen(buf);
2024 if (size<n) size =
n;
2025 memcpy(c, buf, size);
2184 #define TXMLWriteArrayNoncompress(vname, arrsize) \
2186 for(Int_t indx=0;indx<arrsize;indx++) \
2187 XmlWriteBasic(vname[indx]); \
2191 #define TXMLWriteArrayCompress(vname, arrsize) \
2194 while(indx<arrsize) { \
2195 XMLNodePointer_t elemnode = XmlWriteBasic(vname[indx]); \
2196 Int_t curr = indx; indx++; \
2197 while ((indx<arrsize) && (vname[indx]==vname[curr])) indx++; \
2198 if (indx-curr > 1) \
2199 fXML->NewIntAttr(elemnode, xmlio::cnt, indx-curr); \
2203 #define TXMLWriteArrayContent(vname, arrsize) \
2205 if (fCompressLevel>0) { \
2206 TXMLWriteArrayCompress(vname, arrsize) \
2208 TXMLWriteArrayNoncompress(vname, arrsize) \
2213 #define TBufferXML_WriteArray(vname) \
2215 BeforeIOoperation(); \
2216 XMLNodePointer_t arrnode = CreateItemNode(xmlio::Array); \
2217 fXML->NewIntAttr(arrnode, xmlio::Size, n); \
2218 PushStack(arrnode); \
2219 TXMLWriteArrayContent(vname, n); \
2346 #define TBufferXML_WriteFastArray(vname) \
2348 BeforeIOoperation(); \
2350 TStreamerElement* elem = Stack(0)->fElem; \
2351 if ((elem!=0) && (elem->GetType()>TStreamerInfo::kOffsetL) && \
2352 (elem->GetType()<TStreamerInfo::kOffsetP) && \
2353 (elem->GetArrayLength()!=n)) fExpectedChain = kTRUE; \
2354 if (fExpectedChain) { \
2355 TStreamerInfo* info = Stack(1)->fInfo; \
2356 Int_t startnumber = Stack(0)->fElemNumber; \
2357 fExpectedChain = kFALSE; \
2360 elem =(TStreamerElement*)info->GetElements()->At(startnumber++); \
2361 if (elem->GetType()<TStreamerInfo::kOffsetL) { \
2362 if(index>0) { PopStack(); CreateElemNode(elem); } \
2363 fCanUseCompact = kTRUE; \
2364 XmlWriteBasic(vname[index]); \
2367 XMLNodePointer_t arrnode = CreateItemNode(xmlio::Array); \
2368 Int_t elemlen = elem->GetArrayLength(); \
2369 PushStack(arrnode); \
2370 TXMLWriteArrayContent((vname+index), elemlen); \
2376 XMLNodePointer_t arrnode = CreateItemNode(xmlio::Array); \
2377 PushStack(arrnode); \
2378 TXMLWriteArrayContent(vname, n); \
2401 for (
int i=0;i<
n;i++) {
2402 if (*buf < 27) { usedefault =
kTRUE;
break; }
2566 Info(
"StreamObject",
"Class: %s", (cl ? cl->
GetName() :
"none"));
2574 #define TBufferXML_operatorin(vname) \
2576 BeforeIOoperation(); \
2577 XmlReadBasic(vname); \
2727 #define TBufferXML_operatorout(vname) \
2729 BeforeIOoperation(); \
2730 XmlWriteBasic(vname); \
2878 snprintf(buf,
sizeof(buf),
"%d",value);
2888 snprintf(buf,
sizeof(buf),
"%hd", value);
2898 snprintf(buf,
sizeof(buf),
"%d", value);
2908 snprintf(buf,
sizeof(buf),
"%ld", value);
2918 snprintf(buf,
sizeof(buf),
FLong64, value);
2956 snprintf(buf,
sizeof(buf),
"%u", value);
2966 snprintf(buf,
sizeof(buf),
"%hu", value);
2976 snprintf(buf,
sizeof(buf),
"%u", value);
2986 snprintf(buf,
sizeof(buf),
"%lu", value);
2996 snprintf(buf,
sizeof(buf),
FULong64, value);
3027 sscanf(res,
"%d", &n);
3040 sscanf(res,
"%hd", &value);
3052 sscanf(res,
"%d", &value);
3064 sscanf(res,
"%ld", &value);
3088 sscanf(res,
"%f", &value);
3100 sscanf(res,
"%lf", &value);
3125 sscanf(res,
"%ud", &n);
3138 sscanf(res,
"%hud", &value);
3150 sscanf(res,
"%u", &value);
3162 sscanf(res,
"%lu", &value);
3237 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3238 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3243 (*iter).PrintDebug(*
this,obj);
3249 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3250 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3274 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3275 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3280 (*iter).PrintDebug(*
this,*(
char**)start_collection);
3281 (*iter)(*
this,start_collection,end_collection);
3286 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3287 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3292 (*iter)(*
this,start_collection,end_collection);
3314 void *arr0 = loopconfig->
GetFirstAddress(start_collection,end_collection);
3316 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3317 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3322 (*iter).PrintDebug(*
this,arr0);
3323 (*iter)(*
this,start_collection,end_collection,loopconfig);
3328 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3329 for(TStreamerInfoActions::ActionContainer_t::const_iterator
iter = sequence.
fActions.begin();
3334 (*iter)(*
this,start_collection,end_collection,loopconfig);
Int_t fCompressLevel
! Compression level and algorithm
TObject * GetParent() const
Return pointer to parent of this buffer.
Describe Streamer information for one class version.
XMLNodePointer_t CreateItemNode(const char *name)
Create item node of specified name.
virtual Int_t ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection)
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
virtual const char * GetTitle() const
Returns title of object.
#define TBufferXML_operatorin(vname)
virtual ~TBufferXML()
Destroy xml buffer.
#define TBufferXML_operatorout(vname)
void XmlReadBlock(XMLNodePointer_t node)
Read binary block of data from xml.
TXMLStackObj * PushStack(XMLNodePointer_t current, Bool_t simple=kFALSE)
Add new level to xml stack.
virtual Int_t ReadStaticArray(Bool_t *b)
Read array of Bool_t from buffer.
void Add(ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table. The key should be unique.
virtual void WriteObject(const TObject *obj)
Convert object into xml structures.
virtual Int_t ReadStaticArrayFloat16(Float_t *f, TStreamerElement *ele=0)
Read array of Float16_t from buffer.
virtual void ReadFloat16(Float_t *f, TStreamerElement *ele=0)
Read a Float16_t from the buffer.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket...
virtual void WriteLong64(Long64_t l)
Writes Long64_t value to buffer.
ActionContainer_t fActions
void SetCompressionAlgorithm(Int_t algorithm=0)
See comments for function SetCompressionSettings.
virtual void ReadFastArrayDouble32(Double_t *d, Int_t n, TStreamerElement *ele=0)
Read array of Double32_t from buffer.
void WorkWithElement(TStreamerElement *elem, Int_t comp_type)
This function is a part of SetStreamerElementNumber method.
Bool_t ProcessPointer(const void *ptr, XMLNodePointer_t node)
Add "ptr" attribute to node, if ptr is null or if ptr is pointer on object, which is already saved in...
void XmlWriteBlock(XMLNodePointer_t node)
Write binary data block from buffer to xml.
void FreeAttr(XMLNodePointer_t xmlnode, const char *name)
remove attribute from xmlnode
virtual void ReadWithFactor(Float_t *ptr, Double_t factor, Double_t minvalue)
Read a Double32_t from the buffer when the factor and minimun value have been specified see comments ...
virtual void ReadLong(Long_t &l)
Reads Long_t value from buffer.
virtual void WriteFastArray(const Bool_t *b, Int_t n)
Write array of Bool_t to buffer.
virtual Int_t ReadArray(Bool_t *&b)
Read array of Bool_t from buffer.
virtual TClass * GetClass() const =0
TLoopConfiguration * fLoopConfig
If this is a bundle of memberwise streaming action, this configures the looping.
static void * ConvertFromXMLAny(const char *str, TClass **cl=0, Bool_t GenericLayout=kFALSE, Bool_t UseNamespaces=kFALSE)
Read object of any class from XML, produced by ConvertToXML() method.
Int_t GetLast() const
Return index of last object in array.
virtual void WriteLong(Long_t l)
Writes Long_t value to buffer.
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
Bool_t IsUseNamespaces() const
void SetCompressionSettings(Int_t settings=1)
Used to specify the compression level and algorithm.
void SetCompressionLevel(Int_t level=1)
See comments for function SetCompressionSettings.
#define TBufferXML_WriteArray(vname)
virtual void ReadTString(TString &s)
Read TString from TBuffer.
virtual void ClassMember(const char *name, const char *typeName=0, Int_t arrsize1=-1, Int_t arrsize2=-1)
Method indicates name and typename of class member, which should be now streamed in custom streamer...
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
XMLNodePointer_t XmlWriteObject(const void *obj, const TClass *objClass)
Write object to buffer If object was written before, only pointer will be stored Return pointer to to...
virtual void WriteULong64(ULong64_t l)
Writes ULong64_t value to buffer.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual void ReadStdString(std::string &s)
Reads a std::string.
virtual void ReadFastArray(Bool_t *b, Int_t n)
Read array of Bool_t from buffer.
virtual void SkipVersion(const TClass *cl=0)
Skip class version from I/O buffer.
virtual TObject * Remove(TObject *obj)
Remove object from array.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)
Suppressed function of TBuffer.
void RegisterPointer(const void *ptr, XMLNodePointer_t node)
Register pair of object pointer and node, where this object is saved, in object map.
virtual Int_t ReadStaticArrayDouble32(Double_t *d, TStreamerElement *ele=0)
Read array of Double32_t from buffer.
virtual void WriteChar(Char_t c)
Writes Char_t value to buffer.
virtual TClass * ReadClass(const TClass *cl=0, UInt_t *objTag=0)
Function to read class from buffer, used in old-style streamers.
void SetParent(TObject *parent)
Set parent owning this buffer.
XMLNodePointer_t XmlWriteAny(const void *obj, const TClass *cl)
Convert object of any class to xml structures Return pointer on top xml element.
virtual void ReadFastArrayWithNbits(Float_t *ptr, Int_t n, Int_t nbits)
Read array of Float16_t from buffer.
virtual void SetArrayDim(Int_t dim)
Set number of array dimensions.
void CreateElemNode(const TStreamerElement *elem)
Create xml node correspondent to TStreamerElement object.
virtual void WriteTString(const TString &s)
Writes a TString.
Int_t GetCompressionSettings() const
virtual void WriteDouble32(Double_t *d, TStreamerElement *ele=0)
Write a Double32_t to the buffer.
virtual void SetMaxIndex(Int_t dim, Int_t max)
set maximum index for array with dimension dim
EXMLLayout GetXmlLayout() const
void UnlinkFreeNode(XMLNodePointer_t xmlnode)
combined operation. Unlink node and free used memory
XMLNodePointer_t XmlWriteValue(const char *value, const char *name)
Create xml node with specified name and adds it to stack node.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
XMLAttrPointer_t NewIntAttr(XMLNodePointer_t xmlnode, const char *name, Int_t value)
create node attribute with integer value
#define TBufferXML_WriteFastArray(vname)
virtual void WriteULong(ULong_t l)
Writes ULong_t value to buffer.
const char * GetNodeContent(XMLNodePointer_t xmlnode)
get contents (if any) of xml node
Int_t GetIOVersion() const
const char * Data() const
virtual void ReadCharP(Char_t *c)
Reads array of characters from buffer.
TXMLFile * XmlFile()
Returns pointer to TXMLFile object.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void StreamObject(void *obj, const type_info &typeinfo, const TClass *onFileClass=0)
steram object to/from buffer
Int_t GetBaseClassOffset(const TClass *toBase, void *address=0, bool isDerivedObject=true)
virtual void WriteInt(Int_t i)
Writes Int_t value to buffer.
Bool_t VerifyAttr(XMLNodePointer_t node, const char *name, const char *value, const char *errinfo=0)
Checks, that attribute of specified name exists and has specified value.
virtual void WriteShort(Short_t s)
Writes Short_t value to buffer.
virtual void ReadFastArrayFloat16(Float_t *f, Int_t n, TStreamerElement *ele=0)
Read array of Float16_t from buffer.
virtual void * GetFirstAddress(void *start, const void *end) const =0
virtual void DecrementLevel(TVirtualStreamerInfo *)
Function is called from TStreamerInfo WriteBuffer and Readbuffer functions and decrease level in xml ...
Bool_t VerifyNode(XMLNodePointer_t node, const char *name, const char *errinfo=0)
Check, if node has specified name.
virtual Int_t ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object)
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
virtual void WriteUChar(UChar_t c)
Writes UChar_t value to buffer.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)
Read version value from buffer.
The TNamed class is the base class for all named ROOT classes.
void BeforeIOoperation()
Function is called before any IO operation of TBuffer Now is used to store version value if no proper...
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual void ReadShort(Short_t &s)
Reads Short_t value from buffer.
Int_t AtoI(const char *sbuf, Int_t def=0, const char *errinfo=0)
converts string to integer.
std::map< std::string, std::string >::const_iterator iter
virtual void WriteUShort(UShort_t s)
Writes UShort_t value to buffer.
Int_t GetCompressionAlgorithm() const
virtual void WriteUInt(UInt_t i)
Writes UInt_t value to buffer.
XMLNsPointer_t NewNS(XMLNodePointer_t xmlnode, const char *reference, const char *name=0)
create namespace attribute for xmlnode.
int R__unzip_header(Int_t *nin, UChar_t *bufin, Int_t *lout)
void SetIOVersion(Int_t v)
virtual void WriteFastArrayDouble32(const Double_t *d, Int_t n, TStreamerElement *ele=0)
Write array of Double32_t to buffer.
virtual void WriteCharP(const Char_t *c)
Writes array of characters to buffer.
TClass * GetClass() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Base class of the Configurations for the member wise looping routines.
virtual void ReadULong64(ULong64_t &l)
Reads ULong64_t value from buffer.
virtual void ReadBool(Bool_t &b)
Reads Bool_t value from buffer.
const char * GetNodeName(XMLNodePointer_t xmlnode)
returns name of xmlnode
XMLNodePointer_t StackNode()
Return pointer on current xml node.
void Expand(Int_t newsize, Bool_t copy=kTRUE)
Expand (or shrink) the I/O buffer to newsize bytes.
virtual void ReadUChar(UChar_t &c)
Reads UChar_t value from buffer.
virtual void WriteTString(const TString &s)
Write TString to TBuffer.
virtual void ReadDouble32(Double_t *d, TStreamerElement *ele=0)
Read a Double32_t from the buffer.
virtual void ReadUInt(UInt_t &i)
Reads UInt_t value from buffer.
const char * XmlGetElementName(const TStreamerElement *el)
return converted name for TStreamerElement
TClass * fExpectedBaseClass
! Pointer to class, which should be stored as parent of current
Int_t IndexOf(const TObject *obj) const
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
void ShiftStack(const char *info=0)
Shift stack node to next.
Bool_t VerifyStackAttr(const char *name, const char *value, const char *errinfo=0)
Checks stack attribute.
virtual void * ReadObjectAny(const TClass *clCast)
Read object from buffer. Only used from TBuffer.
void ShiftToNext(XMLNodePointer_t &xmlnode, Bool_t realnode=kTRUE)
shifts specified node to next if realnode==kTRUE, any special nodes in between will be skipped ...
void SetXML(TXMLEngine *xml)
TObjArray * GetElements() const
#define TBufferXML_ReadArray(tname, vname)
virtual void IncrementLevel(TVirtualStreamerInfo *)
Function is called from TStreamerInfo WriteBuffer and Readbuffer functions and indent new level in xm...
Basic data type descriptor (datatype information is obtained from CINT).
virtual void ReadStdString(std::string &s)
Read std::string from TBuffer.
virtual Int_t ReadArrayFloat16(Float_t *&f, TStreamerElement *ele=0)
Read array of Float16_t from buffer.
TBufferXML()
Default constructor.
virtual void WriteFloat16(Float_t *f, TStreamerElement *ele=0)
Write a Float16_t to the buffer.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
static std::string fgFloatFmt
! Printf argument for floats and doubles, either "%f" or "%e" or "%10f" and so on ...
#define TBufferXML_ReadStaticArray(vname)
virtual void ClassEnd(const TClass *)
Should be called at the end of custom streamer See TBufferXML::ClassBegin for more details...
virtual const char * GetName() const
Returns name of object.
The ROOT global object gROOT contains a list of all defined classes.
static TString ConvertToXML(const TObject *obj, Bool_t GenericLayout=kFALSE, Bool_t UseNamespaces=kFALSE)
Converts object, inherited from TObject class, to XML string fmt contains configuration of XML layout...
Int_t GetNextRefCounter()
Bool_t fCanUseCompact
! Flag indicate that basic type (like Int_t) can be placed in the same tag
virtual void WriteArrayFloat16(const Float_t *f, Int_t n, TStreamerElement *ele=0)
Write array of Float16_t to buffer.
Version_t GetClassVersion() const
Bool_t VerifyStackNode(const char *name, const char *errinfo=0)
Check, if stack node has specified name.
virtual void WriteStdString(const std::string &s)
Writes a TString.
Bool_t VerifyElemNode(const TStreamerElement *elem)
Checks, if stack node correspond to TStreamerElement object.
void ExtractReference(XMLNodePointer_t node, const void *ptr, const TClass *cl)
Analyse, if node has "ref" attribute and register it to object map.
static void SetFloatFormat(const char *fmt="%e")
void PerformPreProcessing(const TStreamerElement *elem, XMLNodePointer_t elemnode)
Function is unpack TObject and TString structures to be able read them from custom streamers of this ...
virtual void WriteObjectClass(const void *actualObjStart, const TClass *actualClass)
Write object to buffer. Only used from TBuffer.
void SkipEmpty(XMLNodePointer_t &xmlnode)
Skip all current empty nodes and locate on first "true" node.
const char * XmlConvertClassName(const char *name)
convert class name to exclude any special symbols like ':', '<' '>' ',' and spaces ...
virtual void WriteFloat(Float_t f)
Writes Float_t value to buffer.
void CheckVersionBuf()
Checks buffer, filled by WriteVersion if next data is arriving, version should be stored in buffer...
Bool_t HasAttr(XMLNodePointer_t xmlnode, const char *name)
checks if node has attribute of specified name
static const char * GetFloatFormat()
virtual void WriteArrayDouble32(const Double_t *d, Int_t n, TStreamerElement *ele=0)
Write array of Double32_t to buffer.
static TObject * ConvertFromXML(const char *str, Bool_t GenericLayout=kFALSE, Bool_t UseNamespaces=kFALSE)
Read object from XML, produced by ConvertToXML() method.
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)
Copies class version to buffer, but not writes it to xml Version will be written with next I/O operat...
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
virtual void ReadWithNbits(Float_t *ptr, Int_t nbits)
Read a Float16_t from the buffer when the number of bits is specified (explicitly or not) see comment...
virtual void ReadDouble(Double_t &d)
Reads Double_t value from buffer.
virtual void WriteArray(const Bool_t *b, Int_t n)
Write array of Bool_t to buffer.
Bool_t ExtractPointer(XMLNodePointer_t node, void *&ptr, TClass *&cl)
Searches for "ptr" attribute and returns pointer to object and class, if "ptr" attribute reference to...
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
const char * GetAttr(XMLNodePointer_t xmlnode, const char *name)
returns value of attribute for xmlnode
void SaveSingleNode(XMLNodePointer_t xmlnode, TString *res, Int_t layout=1)
convert single xml node (and its child node) to string if layout<=0, no any spaces or newlines will b...
virtual void ReadInt(Int_t &i)
Reads Int_t value from buffer.
virtual void ReadUShort(UShort_t &s)
Reads UShort_t value from buffer.
unsigned long long ULong64_t
virtual void ReadULong(ULong_t &l)
Reads ULong_t value from buffer.
Bool_t fExpectedChain
! Flag to resolve situation when several elements of same basic type stored as FastArray ...
void WorkWithClass(TStreamerInfo *info, const TClass *cl=0)
Prepares buffer to stream data of specified class.
const char * XmlClassNameSpaceRef(const TClass *cl)
produce string which used as reference in class namespace definition
virtual void ReadTString(TString &s)
Reads a TString.
virtual void WriteObject(const TObject *obj)
Write object to I/O buffer.
virtual void WriteDouble(Double_t d)
Writes Double_t value to buffer.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
void FreeNode(XMLNodePointer_t xmlnode)
release all memory, allocated fro this node and destroyes node itself
void R__unzip(Int_t *nin, UChar_t *bufin, Int_t *lout, char *bufout, Int_t *nout)
Bool_t VerifyItemNode(const char *name, const char *errinfo=0)
Checks, if stack node is item and has specified name.
TXMLStackObj * Stack(Int_t depth=0)
Return xml stack object of specified depth.
virtual void WriteBool(Bool_t b)
Writes Bool_t value to buffer.
Mother of all ROOT objects.
XMLNodePointer_t XmlWriteBasic(Char_t value)
Converts Char_t to string and add xml node to buffer.
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
Class for serializing/deserializing object to/from xml.
virtual void ReadLong64(Long64_t &l)
Reads Long64_t value from buffer.
XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
returns first child of xml node
void * XmlReadObject(void *obj, TClass **cl=0)
Read object from the buffer.
virtual void SetUseNamespaces(Bool_t iUseNamespaces=kTRUE)
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)
Suppressed function of TBuffer.
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=0)
create new child element for parent node
virtual void WriteStdString(const std::string &s)
Write std::string to TBuffer.
Int_t GetCompressionLevel() const
virtual void WriteFastArray(const Bool_t *b, Int_t n)
Write array of n bools into the I/O buffer.
virtual void ReadFastArrayWithFactor(Float_t *ptr, Int_t n, Double_t factor, Double_t minvalue)
Read array of Float16_t from buffer.
virtual void SkipObjectAny()
Skip any kind of object from buffer Actually skip only one node on current level of xml structure...
Int_t GetIntAttr(XMLNodePointer_t node, const char *name)
returns value of attribute as integer
virtual void WriteClass(const TClass *cl)
Function to write class into buffer, used in old-style streamers.
virtual void SetStreamerElementNumber(TStreamerElement *elem, Int_t comp_type)
Function is called from TStreamerInfo WriteBuffer and Readbuffer functions and add/verify next elemen...
void SetBaseVersion(Int_t v)
TClass * XmlDefineClass(const char *xmlClassName)
define class for the converted class name, where special symbols were replaced by '_' ...
void PerformPostProcessing()
Function is converts TObject and TString structures to more compact representation.
virtual void WriteFastArrayFloat16(const Float_t *d, Int_t n, TStreamerElement *ele=0)
Write array of Float16_t to buffer.
virtual void ReadChar(Char_t &c)
Reads Char_t value from buffer.
virtual void ClassBegin(const TClass *, Version_t=-1)
Should be called at the beginning of custom class streamer.
XMLNodePointer_t ReadSingleNode(const char *src)
read single xml node from provided string
TObject * At(Int_t idx) const
#define TBufferXML_ReadFastArray(vname)
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
virtual void Compress()
Remove empty slots from array.
Abstract Interface class describing Streamer information for one class.
const char * ClassVersion
virtual Int_t ReadArrayDouble32(Double_t *&d, TStreamerElement *ele=0)
Read array of Double32_t from buffer.
virtual void SetXmlLayout(EXMLLayout layout)
virtual void ReadFloat(Float_t &f)
Reads Float_t value from buffer.
TXMLStackObj * PopStack()
Remove one level from xml stack.
void XmlReadBasic(Char_t &value)
Reads string from current xml node and convert it to Char_t value.
This class stores a (key,value) pair using an external hash.
virtual void ReadFastArray(Bool_t *b, Int_t n)
Read array of n bools from the I/O buffer.
void Resize(Ssiz_t n)
Resize the string. Truncate or add blanks as necessary.
const char * XmlReadValue(const char *name)
read string value from current stack node
void * XmlReadAny(XMLNodePointer_t node, void *obj, TClass **cl)
Recreate object from xml structure.
TVirtualStreamerInfo * fStreamerInfo
StreamerInfo used to derive these actions.
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.