175 fh <<
"// generated header file" << std::endl << std::endl;
176 fh <<
"#ifndef " <<
filename <<
"_h" << std::endl;
177 fh <<
"#define " <<
filename <<
"_h" << std::endl << std::endl;
181 fs <<
"// generated source file" << std::endl << std::endl;
182 fs <<
"#include \"" <<
filename <<
".h\"" << std::endl << std::endl;
189 while ((cl = (
TClass *)iter()) !=
nullptr) {
204 while ((cl = (
TClass *)iter()) !=
nullptr) {
207 <<
" &buf, void* ptr = 0, bool checktypes = true);" << std::endl
213 fh <<
"#endif" << std::endl << std::endl;
214 fs << std::endl << std::endl;
228 switch (
member->GetDataType()->GetType()) {
231 case kInt_t:
return "int";
239 char first =
member->GetDataType()->GetTypeName()[0];
240 if ((first ==
'B') || (first ==
'b'))
242 return "unsigned char";
246 case kUInt_t:
return "unsigned int";
247 case kULong_t:
return "unsigned long";
254 return member->GetTypeName();
265 switch (
el->GetType() % 20) {
276 char first =
el->GetTypeNameBasic()[0];
277 if ((first ==
'B') || (first ==
'b'))
279 return "unsigned char";
371 if (
member->IsaPointer() || (
member->GetArrayDim() > 0))
411 if (
member->GetArrayDim() == 0)
438 fs <<
"//__________________________________________________________________________" << std::endl;
441 fs <<
"{" << std::endl;
444 fs <<
tab1 <<
"if (buf.IsReading()) { " << std::endl;
450 while ((
c1 = (
TClass *)iter()) !=
nullptr) {
453 if (!
c1->GetListOfBases()->FindObject(cl->
GetName()))
456 fs <<
tab2 <<
"if (checktypes) {" << std::endl;
461 fs <<
"res = " <<
GetStreamerName(
c1) <<
"(buf, dynamic_cast<" <<
c1->GetName() <<
"*>(obj));" << std::endl;
462 fs <<
tab3 <<
"if (res) return dynamic_cast<" << cl->
GetName() <<
"*>((" <<
c1->GetName() <<
" *) res);"
466 fs <<
tab2 <<
"}" << std::endl;
468 fs <<
tab2 <<
"if (!buf.CheckClassNode(\"" << cl->
GetName() <<
"\", " <<
info->GetClassVersion() <<
")) return 0;"
471 fs <<
tab2 <<
"if (obj==0) obj = new " << cl->
GetName() <<
";" << std::endl;
524 fs <<
", " <<
el->GetArrayLength() <<
", \"" <<
el->GetName() <<
"\");" << std::endl;
546 std::cout <<
"fatal error with TStreamerBasicPointer" << std::endl;
554 fs <<
", \"" <<
el->GetName() <<
"\", true)" <<
endch <<
";" << std::endl;
562 fs <<
", \"" <<
el->GetName() <<
"\")" <<
endch <<
";" << std::endl;
568 <<
el->GetClassPointer()->GetName() <<
"*>(obj), false);" << std::endl;
575 if (
el->GetArrayLength() > 0) {
577 fs <<
", " <<
el->GetArrayLength() <<
", -1"
578 <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
581 fs <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
589 if (
el->GetArrayLength() > 0) {
590 fs <<
tab2 <<
"for (int n=0;n<" <<
el->GetArrayLength() <<
";n++) "
591 <<
"delete (" <<
ElementGetter(cl,
el->GetName()) <<
")[n];" << std::endl;
593 fs <<
", " <<
el->GetArrayLength() <<
", \"" <<
el->GetName() <<
"\", "
600 fs <<
"(" <<
el->GetClassPointer()->GetName() <<
"*) buf.ReadObjectPtr(\"" <<
el->GetName() <<
"\", "
609 fs <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
616 fs <<
", " <<
el->GetArrayLength() <<
", sizeof(" <<
el->GetClassPointer()->GetName() <<
"), \""
633 fs <<
tab2 <<
"// STL type = " <<
elstl->GetSTLtype() << std::endl;
637 fs <<
tab2 <<
"buf.SkipMember(\"" <<
el->GetName() <<
"\"); // sinfo type " <<
el->GetType() <<
" of class "
638 <<
el->GetClassPointer()->GetName() <<
" not supported" << std::endl;
641 fs <<
tab2 <<
"buf.EndClassNode();" << std::endl;
643 fs <<
tab1 <<
"} else {" << std::endl;
647 fs <<
tab2 <<
"if (obj==0) return 0;" << std::endl;
651 while ((
c1 = (
TClass *)iter()) !=
nullptr) {
654 if (!
c1->GetListOfBases()->FindObject(cl->
GetName()))
658 fs <<
tab2 <<
"if (checktypes) {" << std::endl;
660 fs <<
tab3 <<
"if (dynamic_cast<" <<
c1->GetName() <<
"*>(obj))" << std::endl;
665 fs <<
tab2 <<
"}" << std::endl;
667 fs <<
tab2 <<
"buf.StartClassNode(\"" << cl->
GetName() <<
"\", " <<
info->GetClassVersion() <<
");" << std::endl;
695 fs <<
tab2 <<
"buf.WriteValue(";
700 fs <<
", \"" <<
el->GetName() <<
"\");" << std::endl;
721 fs <<
", " <<
el->GetArrayLength() <<
", \"" <<
el->GetName() <<
"\");" << std::endl;
742 std::cout <<
"fatal error with TStreamerBasicPointer" << std::endl;
746 fs <<
", " <<
ElementGetter(cl,
elp->GetCountName()) <<
", \"" <<
el->GetName() <<
"\", true);" << std::endl;
758 <<
el->GetClassPointer()->GetName() <<
"*>(obj), false);" << std::endl;
765 if (
el->GetArrayLength() > 0) {
767 fs <<
", " <<
el->GetArrayLength() <<
", -1"
768 <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
771 fs <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
779 if (
el->GetArrayLength() > 0) {
781 fs <<
", " <<
el->GetArrayLength() <<
", \"" <<
el->GetName() <<
"\", "
785 fs <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
792 fs <<
", \"" <<
el->GetName() <<
"\", " <<
GetStreamerName(
el->GetClassPointer()) <<
");" << std::endl;
798 fs <<
", " <<
el->GetArrayLength() <<
", sizeof(" <<
el->GetClassPointer()->GetName() <<
"), \""
814 fs <<
tab2 <<
"// STL type = " <<
elstl->GetSTLtype() << std::endl;
818 fs <<
tab2 <<
"buf.MakeEmptyMember(\"" <<
el->GetName() <<
"\"); // sinfo type " <<
el->GetType()
819 <<
" of class " <<
el->GetClassPointer()->GetName() <<
" not supported" << std::endl;
822 fs <<
tab2 <<
"buf.EndClassNode();" << std::endl;
824 fs <<
tab1 <<
"}" << std::endl;
825 fs <<
tab1 <<
"return obj;" << std::endl;
826 fs <<
"}" << std::endl << std::endl;
859 <<
"(" <<
argcl->GetName() <<
"*)"
874 <<
"buf.ReadSTLstring();" << std::endl;
886 default:
fs <<
"/* argument " <<
argname <<
" not supported */";
912 fs <<
"buf.WriteValue(" <<
accname <<
", 0);" << std::endl;
917 fs <<
"buf.WriteObjectPtr(";
927 fs <<
"buf.WriteSTLstring(";
932 fs <<
");" << std::endl;
936 default:
fs <<
"/* argument not supported */" << std::endl;
983 default:
return false;
986 for (
int n = 0;
n <
narg;
n++) {
1011 if (buf.
Index(
"const ") == 0) {
1013 while ((buf.
Length() > 0) && (buf[0] ==
' '))
1020 else if (buf ==
"string")
1065 fs <<
"*dynamic_cast<" <<
contcl->GetName() <<
"*>(obj);" << std::endl;
1069 if (
isarr &&
el->GetArrayLength()) {
1071 fs <<
tab3 <<
"for(int n=0;n<" <<
el->GetArrayLength() <<
";n++) {" << std::endl;
1079 fs <<
tabs <<
"if (" << (
isarr ?
"*cont" :
"cont") <<
"==0) {" << std::endl;
1080 fs <<
tabs2 <<
"buf.WriteSTLsize(0" << (
isstr ?
",true);" :
");") << std::endl;
1081 fs <<
tabs <<
"} else {" << std::endl;
1084 fs <<
tabs2 <<
"buf.WriteSTLsize(" <<
accname << (
isstr ?
"length(), true);" :
"size());") << std::endl;
1087 fs <<
tabs2 <<
"buf.WriteSTLstringData(" <<
accname <<
"c_str());" << std::endl;
1091 fs <<
tabs2 <<
"int k = 0;" << std::endl;
1094 fs <<
tabs2 <<
contcl->GetName() <<
"::const_iterator iter;" << std::endl;
1097 fs << std::endl <<
tabs2 <<
tab1 <<
"arr[k++] = *iter;" << std::endl;
1098 fs <<
tabs2 <<
"buf.WriteArray(arr, " <<
accname <<
"size(), 0, false);" << std::endl;
1099 fs <<
tabs2 <<
"delete[] arr;" << std::endl;
1100 }
else if (
narg == 1) {
1103 }
else if (
narg == 2) {
1104 fs <<
" {" << std::endl;
1109 fs <<
tabs2 <<
"}" << std::endl;
1114 fs <<
tabs <<
"}" << std::endl;
1116 if (
isarr &&
el->GetArrayLength()) {
1118 fs <<
tabs <<
"cont++;" << std::endl;
1120 fs <<
tabs <<
"(void*) cont = (char*) cont + sizeof(" <<
contcl->GetName() <<
");" << std::endl;
1121 fs <<
tab3 <<
"}" << std::endl;
1124 fs <<
tab3 <<
"buf.EndSTLnode();" << std::endl;
1125 fs <<
tab2 <<
"}" << std::endl;
1154 fs <<
"*dynamic_cast<" <<
contcl->GetName() <<
"*>(obj);" << std::endl;
1158 if (
isarr &&
el->GetArrayLength()) {
1160 fs <<
tab3 <<
"for(int n=0;n<" <<
el->GetArrayLength() <<
";n++) {" << std::endl;
1164 fs <<
tabs <<
"int size = buf.ReadSTLsize(" << (
isstr ?
"true);" :
");") << std::endl;
1168 fs <<
tabs <<
"if (size==0) " <<
accptr <<
" = 0;" << std::endl;
1169 fs <<
tabs <<
" else " <<
accptr <<
" = new " <<
contcl->GetName() <<
";" << std::endl;
1173 fs <<
"cont" <<
endch <<
";" << std::endl;
1180 fs <<
tabs <<
"if (size>0) " <<
accname <<
"assign(buf.ReadSTLstringData(size));" << std::endl;
1184 fs <<
tabs <<
"buf.ReadArray(arr, size, 0, false);" << std::endl;
1187 fs <<
tabs <<
"for(int k=0;k<size;k++)";
1195 fs <<
"(arr[k]);" << std::endl;
1196 fs <<
tabs <<
"delete[] arr;" << std::endl;
1197 }
else if (
narg == 1) {
1209 fs <<
"(" <<
arg1 <<
");" << std::endl;
1210 fs <<
tabs <<
"}" << std::endl;
1211 }
else if (
narg == 2) {
1220 fs <<
accname <<
"insert(make_pair(" <<
arg1 <<
", " <<
arg2 <<
"));" << std::endl;
1221 fs <<
tabs <<
"}" << std::endl;
1225 if (
isarr &&
el->GetArrayLength()) {
1227 fs <<
tabs <<
"cont++;" << std::endl;
1229 fs <<
tabs <<
"(void*) cont = (char*) cont + sizeof(" <<
contcl->GetName() <<
");" << std::endl;
1230 fs <<
tab3 <<
"}" << std::endl;
1233 fs <<
tab3 <<
"buf.EndSTLnode();" << std::endl;
1234 fs <<
tab2 <<
"}" << std::endl;
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
const char * names_xmlfileclass
TClass instances represent classes, structs and namespaces in the ROOT type system.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
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.
All ROOT classes may have RTTI (run time type identification) support added.
Basic data type descriptor (datatype information is obtained from CINT).
Method or function calling interface.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
TObject * At(Int_t idx) const override
Int_t GetLast() const override
Return index of last object in array.
Mother of all ROOT objects.
const char * Data() const
TString & Remove(Ssiz_t pos)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Abstract Interface class describing Streamer information for one class.
@ kUChar
Equal to TDataType's kchar.
TString GetMemberTypeName(TDataMember *member)
returns name of simple data type for given data member
Bool_t ProduceCode(TList *cllist, const char *filename)
Produce streamers for provide class list TList should include list of classes, for which code should ...
TString GetStreamerName(TClass *cl)
returns streamer function name for given class
TString fSetterName
buffer for name of getter method
const char * ElementGetter(TClass *cl, const char *membername, int specials=0)
produce code to access member of given class.
TXMLSetup fXmlSetup
buffer for name of setter method
~TXMLPlayer() override
destructor of TXMLPlayer object
TString GetBasicTypeName(TStreamerElement *el)
return simple data types for given TStreamerElement object
void ReadSTLarg(std::ostream &fs, TString &argname, int argtyp, Bool_t isargptr, TClass *argcl, TString &tname, TString &ifcond)
Produce code to read argument of stl container from xml file.
TXMLPlayer()
default constructor
TString GetBasicTypeReaderMethodName(Int_t type, const char *realname)
return functions name to read simple data type from xml file
void ProduceStreamerSource(std::ostream &fs, TClass *cl, TList *cllist)
Produce source code of streamer function for specified class.
Bool_t ProduceSTLstreamer(std::ostream &fs, TClass *cl, TStreamerSTL *el, Bool_t isWriting)
Produce code of xml streamer for data member of stl type.
const char * ElementSetter(TClass *cl, const char *membername, char *endch)
Produce code to set value to given data member.
void WriteSTLarg(std::ostream &fs, const char *accname, int argtyp, Bool_t isargptr, TClass *argcl)
Produce code to write argument of stl container to xml file.
const char * XmlGetElementName(const TStreamerElement *el)
return converted name for TStreamerElement
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
int GetSplit(const char *type, std::vector< std::string > &output, int &nestedLoc, EModType mode=TClassEdit::kNone)
Stores in output (after emptying it) the split type.