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;
231 case kInt_t:
return "int";
242 return "unsigned char";
246 case kUInt_t:
return "unsigned int";
247 case kULong_t:
return "unsigned long";
279 return "unsigned char";
368 if ((specials == 1) && member) {
378 if ((specials == 2) && member) {
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;
471 fs <<
tab2 <<
"if (obj==0) obj = new " << cl->
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;
637 fs <<
tab2 <<
"buf.SkipMember(\"" << el->
GetName() <<
"\"); // sinfo type " << el->
GetType() <<
" of class "
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;
695 fs <<
tab2 <<
"buf.WriteValue(";
700 fs <<
", \"" << el->
GetName() <<
"\");" << std::endl;
742 std::cout <<
"fatal error with TStreamerBasicPointer" << std::endl;
818 fs <<
tab2 <<
"buf.MakeEmptyMember(\"" << el->
GetName() <<
"\"); // sinfo type " << el->
GetType()
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;
858 fs << tname << (isargptr ?
" " :
" *") << argname <<
" = "
859 <<
"(" << argcl->
GetName() <<
"*)"
860 <<
"buf.ReadObjectPtr(0, " <<
GetStreamerName(argcl) <<
");" << std::endl;
873 fs <<
"string *" << argname <<
" = "
874 <<
"buf.ReadSTLstring();" << std::endl;
886 default:
fs <<
"/* argument " << argname <<
" not supported */";
912 fs <<
"buf.WriteValue(" << accname <<
", 0);" << std::endl;
917 fs <<
"buf.WriteObjectPtr(";
921 fs <<
"&(" << accname <<
")";
927 fs <<
"buf.WriteSTLstring(";
931 fs <<
"&(" << accname <<
")";
932 fs <<
");" << std::endl;
936 default:
fs <<
"/* argument not supported */" << std::endl;
964 std::vector<std::string> splitName;
983 default:
return false;
986 for (
int n = 0;
n < narg;
n++) {
1000 int pstar = buf.
Index(
"*");
1005 while ((pstar > 0) && (buf[pstar] ==
' '))
1009 isargptr[
n] =
false;
1011 if (buf.
Index(
"const ") == 0) {
1013 while ((buf.
Length() > 0) && (buf[0] ==
' '))
1020 else if (buf ==
"string")
1035 Bool_t akaarrayaccess = (narg == 1) && (argtype[0] < 20);
1037 char tabs[30], tabs2[30];
1049 accname =
"(*cont)->";
1065 fs <<
"*dynamic_cast<" << contcl->
GetName() <<
"*>(obj);" << std::endl;
1070 strlcpy(tabs,
tab4,
sizeof(tabs));
1073 strlcpy(tabs,
tab3,
sizeof(tabs));
1075 strlcpy(tabs2, tabs,
sizeof(tabs2));
1078 strlcat(tabs2,
tab1,
sizeof(tabs2));
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;
1089 if (akaarrayaccess) {
1090 fs << tabs2 << argtname[0] <<
"* arr = new " << argtname[0] <<
"[" << accname <<
"size()];" << std::endl;
1091 fs << tabs2 <<
"int k = 0;" << std::endl;
1094 fs << tabs2 << contcl->
GetName() <<
"::const_iterator iter;" << std::endl;
1095 fs << tabs2 <<
"for (iter = " << accname <<
"begin(); iter != " << accname <<
"end(); iter++)";
1096 if (akaarrayaccess) {
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) {
1101 fs << std::endl << tabs2 <<
tab1;
1102 WriteSTLarg(
fs,
"*iter", argtype[0], isargptr[0], argcl[0]);
1103 }
else if (narg == 2) {
1104 fs <<
" {" << std::endl;
1106 WriteSTLarg(
fs,
"iter->first", argtype[0], isargptr[0], argcl[0]);
1108 WriteSTLarg(
fs,
"iter->second", argtype[1], isargptr[1], argcl[1]);
1109 fs << tabs2 <<
"}" << std::endl;
1114 fs << tabs <<
"}" << std::endl;
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;
1136 accname =
"(*cont)->";
1154 fs <<
"*dynamic_cast<" << contcl->
GetName() <<
"*>(obj);" << std::endl;
1159 strlcpy(tabs,
tab4,
sizeof(tabs));
1162 strlcpy(tabs,
tab3,
sizeof(tabs));
1164 fs << tabs <<
"int size = buf.ReadSTLsize(" << (isstr ?
"true);" :
");") << std::endl;
1167 fs << tabs <<
"delete " << accptr <<
";" << 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;
1176 fs << tabs << accname << (isstr ?
"erase();" :
"clear();") << std::endl;
1180 fs << tabs <<
"if (size>0) " << accname <<
"assign(buf.ReadSTLstringData(size));" << std::endl;
1182 if (akaarrayaccess) {
1183 fs << tabs << argtname[0] <<
"* arr = new " << argtname[0] <<
"[size];" << std::endl;
1184 fs << tabs <<
"buf.ReadArray(arr, size, 0, false);" << std::endl;
1187 fs << tabs <<
"for(int k=0;k<size;k++)";
1189 if (akaarrayaccess) {
1190 fs << std::endl << tabs <<
tab1 << accname;
1195 fs <<
"(arr[k]);" << std::endl;
1196 fs << tabs <<
"delete[] arr;" << std::endl;
1197 }
else if (narg == 1) {
1199 fs <<
" {" << std::endl << tabs <<
tab1;
1200 ReadSTLarg(
fs, arg1, argtype[0], isargptr[0], argcl[0], argtname[0], ifcond);
1203 fs <<
"if (" << ifcond <<
") ";
1209 fs <<
"(" << arg1 <<
");" << std::endl;
1210 fs << tabs <<
"}" << std::endl;
1211 }
else if (narg == 2) {
1212 TString arg1(
"arg1"), arg2(
"arg2"), ifcond;
1213 fs <<
" {" << std::endl << tabs <<
tab1;
1214 ReadSTLarg(
fs, arg1, argtype[0], isargptr[0], argcl[0], argtname[0], ifcond);
1216 ReadSTLarg(
fs, arg2, argtype[1], isargptr[1], argcl[1], argtname[1], ifcond);
1219 fs <<
"if (" << ifcond <<
") ";
1220 fs << accname <<
"insert(make_pair(" << arg1 <<
", " << arg2 <<
"));" << std::endl;
1221 fs << tabs <<
"}" << std::endl;
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;
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.
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
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.
TMethodCall * SetterMethod(TClass *cl)
Return a TMethodCall method responsible for setting the value of data member.
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
Int_t GetArrayDim() const
Return number of array dimensions.
Bool_t IsEnum() const
Return true if data member is an enum.
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
Bool_t IsaPointer() const
Return true if data member is a pointer.
TMethodCall * GetterMethod(TClass *cl=nullptr)
Return a TMethodCall method responsible for getting the value of data member.
TDataType * GetDataType() const
Longptr_t GetOffset() const
Get offset from "this".
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
Basic data type descriptor (datatype information is obtained from CINT).
TString GetTypeName()
Get basic type of typedef, e,g.: "class TDirectory*" -> "TDirectory".
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
Method or function calling interface.
const char * GetMethodName() const
TFunction * GetMethod()
Returns the TMethod describing the method to be executed.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
void Delete(Option_t *option="") override
Remove all objects from the array AND delete all heap based objects.
TObject * At(Int_t idx) const override
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
Int_t GetLast() const override
Return index of last object in array.
void Add(TObject *obj) override
Mother of all ROOT objects.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
const char * GetCountName() const
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
Int_t GetArrayDim() const
Int_t GetArrayLength() const
const char * GetTypeNameBasic() const
Return type name of this element in case the type name is not a standard basic type,...
Bool_t IsaPointer() const override
Return true if the data member is a pointer.
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.
virtual TObjArray * GetElements() const =0
virtual Int_t GetClassVersion() const =0
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
virtual ~TXMLPlayer()
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.