46 const char *Root =
"root";
47 const char *Setup =
"setup";
48 const char *ClassVersion =
"version";
49 const char *IOVersion =
"version";
50 const char *OnlyVersion =
"Version";
51 const char *Ptr =
"ptr";
52 const char *Ref =
"ref";
53 const char *Null =
"null";
54 const char *IdBase =
"id";
55 const char *Size =
"size";
56 const char *Xmlobject =
"XmlObject";
57 const char *Xmlkey =
"XmlKey";
58 const char *Cycle =
"cycle";
59 const char *XmlBlock =
"XmlBlock";
60 const char *Zip =
"zip";
61 const char *Object =
"Object";
62 const char *ObjClass =
"class";
63 const char *Class =
"Class";
64 const char *Member =
"Member";
65 const char *Item =
"Item";
66 const char *Name =
"name";
67 const char *Title =
"title";
68 const char *CreateTm =
"created";
69 const char *ModifyTm =
"modified";
70 const char *ObjectUUID =
"uuid";
71 const char *Type =
"type";
72 const char *Value =
"value";
74 const char *cnt =
"cnt";
75 const char *True =
"true";
76 const char *False =
"false";
77 const char *SInfos =
"StreamerInfos";
79 const char *Array =
"Array";
80 const char *Bool =
"Bool_t";
81 const char *Char =
"Char_t";
82 const char *Short =
"Short_t";
83 const char *Int =
"Int_t";
84 const char *Long =
"Long_t";
85 const char *Long64 =
"Long64_t";
86 const char *Float =
"Float_t";
87 const char *Double =
"Double_t";
88 const char *UChar =
"UChar_t";
89 const char *UShort =
"UShort_t";
90 const char *UInt =
"UInt_t";
91 const char *ULong =
"ULong_t";
92 const char *ULong64 =
"ULong64_t";
93 const char *String =
"string";
94 const char *CharStar =
"CharStar";
97 TString TXMLSetup::fgNameSpaceBase =
"http://root.cern.ch/root/htmldoc/";
102 TString TXMLSetup::DefaultXmlSetup()
104 return TString(
"2xoo");
110 void TXMLSetup::SetNameSpaceBase(
const char *namespacebase)
112 fgNameSpaceBase = namespacebase;
118 TXMLSetup::TXMLSetup(
const char *opt)
120 ReadSetupFromStr(opt);
126 TXMLSetup::TXMLSetup(
const TXMLSetup &src)
127 : fXmlLayout(src.fXmlLayout), fStoreStreamerInfos(src.fStoreStreamerInfos), fUseDtd(src.fUseDtd),
128 fUseNamespaces(src.fUseNamespaces)
135 TXMLSetup &TXMLSetup::operator=(
const TXMLSetup &rhs)
137 fXmlLayout = rhs.fXmlLayout;
138 fStoreStreamerInfos = rhs.fStoreStreamerInfos;
139 fUseDtd = rhs.fUseDtd;
140 fUseNamespaces = rhs.fUseNamespaces;
147 TString TXMLSetup::GetSetupAsString()
149 char setupstr[10] =
"2xxx";
151 setupstr[0] = char(48 + fXmlLayout);
152 setupstr[1] = fStoreStreamerInfos ?
'x' :
'o';
153 setupstr[2] = fUseDtd ?
'x' :
'o';
154 setupstr[3] = fUseNamespaces ?
'x' :
'o';
156 return TString(setupstr);
162 Bool_t TXMLSetup::IsValidXmlSetup(
const char *setupstr)
164 if (!setupstr || (strlen(setupstr) != 4))
166 TString str = setupstr;
168 if ((str[0] < 48) || (str[0] > 53))
170 for (
int n = 1; n < 4; n++)
171 if ((str[n] !=
'o') && (str[n] !=
'x'))
179 Bool_t TXMLSetup::ReadSetupFromStr(
const char *setupstr)
181 if (!setupstr || (strlen(setupstr) < 4))
183 Int_t lay = EXMLLayout(setupstr[0] - 48);
184 if (lay == kGeneralized)
185 fXmlLayout = kGeneralized;
187 fXmlLayout = kSpecialized;
189 fStoreStreamerInfos = setupstr[1] ==
'x';
191 fUseNamespaces = setupstr[3] ==
'x';
198 void TXMLSetup::PrintSetup()
200 std::cout <<
" *** Setup printout ***" << std::endl;
201 std::cout <<
"Attribute mode = " << fXmlLayout << std::endl;
202 std::cout <<
"Store streamer infos = " << (fStoreStreamerInfos ?
"true" :
"false") << std::endl;
203 std::cout <<
"Use dtd = " << (fUseDtd ?
"true" :
"false") << std::endl;
204 std::cout <<
"Use name spaces = " << (fUseNamespaces ?
"true" :
"false") << std::endl;
210 const char *TXMLSetup::XmlConvertClassName(
const char *clname)
213 fStrBuf.ReplaceAll(
"<",
"_");
214 fStrBuf.ReplaceAll(
">",
"_");
215 fStrBuf.ReplaceAll(
",",
"_");
216 fStrBuf.ReplaceAll(
" ",
"_");
217 fStrBuf.ReplaceAll(
":",
"_");
218 return fStrBuf.Data();
224 const char *TXMLSetup::XmlClassNameSpaceRef(
const TClass *cl)
226 TString clname = XmlConvertClassName(cl->GetName());
227 fStrBuf = fgNameSpaceBase;
229 if (fgNameSpaceBase ==
"http://root.cern.ch/root/htmldoc/")
231 return fStrBuf.Data();
237 const char *TXMLSetup::XmlGetElementName(
const TStreamerElement *el)
241 if (!el->InheritsFrom(TStreamerSTL::Class()))
242 return el->GetName();
243 if (strcmp(el->GetName(), el->GetClassPointer()->GetName()) != 0)
244 return el->GetName();
245 return XmlConvertClassName(el->GetName());
251 const char *TXMLSetup::GetElItemName(TStreamerElement *el)
255 fStrBuf = el->GetName();
257 return fStrBuf.Data();
264 TClass *TXMLSetup::XmlDefineClass(
const char *xmlClassName)
266 if (strchr(xmlClassName,
'_') == 0)
267 return TClass::GetClass(xmlClassName);
269 TIter iter(gROOT->GetListOfClasses());
270 TClass *cl =
nullptr;
271 while ((cl = (TClass *)iter()) !=
nullptr) {
272 const char *name = XmlConvertClassName(cl->GetName());
273 if (strcmp(xmlClassName, name) == 0)
283 Int_t TXMLSetup::AtoI(
const char *sbuf, Int_t def,
const char *errinfo)
288 std::cerr <<
"<Error in TXMLSetup::AtoI>" << errinfo <<
" not valid integer: sbuf <NULL>" << std::endl;