174 fh <<
"// generated header file" << std::endl << std::endl;
175 fh <<
"#ifndef " <<
filename <<
"_h" << std::endl;
176 fh <<
"#define " <<
filename <<
"_h" << std::endl << std::endl;
180 fs <<
"// generated source file" << std::endl << std::endl;
181 fs <<
"#include \"" <<
filename <<
".h\"" << std::endl << std::endl;
188 while ((cl = (
TClass *)iter()) !=
nullptr) {
203 while ((cl = (
TClass *)iter()) !=
nullptr) {
206 <<
" &buf, void* ptr = 0, bool checktypes = true);" << std::endl
212 fh <<
"#endif" << std::endl << std::endl;
213 fs << std::endl << std::endl;
230 case kInt_t:
return "int";
239 if ((first ==
'B') || (first ==
'b'))
241 return "unsigned char";
245 case kUInt_t:
return "unsigned int";
246 case kULong_t:
return "unsigned long";
276 if ((first ==
'B') || (first ==
'b'))
278 return "unsigned char";
367 if ((specials == 1) && member) {
377 if ((specials == 2) && member) {
437 fs <<
"//__________________________________________________________________________" << std::endl;
440 fs <<
"{" << std::endl;
443 fs <<
tab1 <<
"if (buf.IsReading()) { " << std::endl;
449 while ((
c1 = (
TClass *)iter()) !=
nullptr) {
452 if (!
c1->GetListOfBases()->FindObject(cl->
GetName()))
455 fs <<
tab2 <<
"if (checktypes) {" << std::endl;
460 fs <<
"res = " <<
GetStreamerName(
c1) <<
"(buf, dynamic_cast<" <<
c1->GetName() <<
"*>(obj));" << std::endl;
461 fs <<
tab3 <<
"if (res) return dynamic_cast<" << cl->
GetName() <<
"*>((" <<
c1->GetName() <<
" *) res);"
465 fs <<
tab2 <<
"}" << std::endl;
470 fs <<
tab2 <<
"if (obj==0) obj = new " << cl->
GetName() <<
";" << std::endl;
545 std::cout <<
"fatal error with TStreamerBasicPointer" << std::endl;
553 fs <<
", \"" << el->
GetName() <<
"\", true)" << endch <<
";" << std::endl;
561 fs <<
", \"" << el->
GetName() <<
"\")" << endch <<
";" << std::endl;
636 fs <<
tab2 <<
"buf.SkipMember(\"" << el->
GetName() <<
"\"); // sinfo type " << el->
GetType() <<
" of class "
640 fs <<
tab2 <<
"buf.EndClassNode();" << std::endl;
642 fs <<
tab1 <<
"} else {" << std::endl;
646 fs <<
tab2 <<
"if (obj==0) return 0;" << std::endl;
650 while ((
c1 = (
TClass *)iter()) !=
nullptr) {
653 if (!
c1->GetListOfBases()->FindObject(cl->
GetName()))
657 fs <<
tab2 <<
"if (checktypes) {" << std::endl;
659 fs <<
tab3 <<
"if (dynamic_cast<" <<
c1->GetName() <<
"*>(obj))" << std::endl;
664 fs <<
tab2 <<
"}" << std::endl;
694 fs <<
tab2 <<
"buf.WriteValue(";
699 fs <<
", \"" << el->
GetName() <<
"\");" << std::endl;
741 std::cout <<
"fatal error with TStreamerBasicPointer" << std::endl;
817 fs <<
tab2 <<
"buf.MakeEmptyMember(\"" << el->
GetName() <<
"\"); // sinfo type " << el->
GetType()
821 fs <<
tab2 <<
"buf.EndClassNode();" << std::endl;
823 fs <<
tab1 <<
"}" << std::endl;
824 fs <<
tab1 <<
"return obj;" << std::endl;
825 fs <<
"}" << std::endl << std::endl;
857 fs << tname << (isargptr ?
" " :
" *") << argname <<
" = "
858 <<
"(" << argcl->
GetName() <<
"*)"
859 <<
"buf.ReadObjectPtr(0, " <<
GetStreamerName(argcl) <<
");" << std::endl;
872 fs <<
"string *" << argname <<
" = "
873 <<
"buf.ReadSTLstring();" << std::endl;
885 default:
fs <<
"/* argument " << argname <<
" not supported */";
911 fs <<
"buf.WriteValue(" << accname <<
", 0);" << std::endl;
916 fs <<
"buf.WriteObjectPtr(";
920 fs <<
"&(" << accname <<
")";
926 fs <<
"buf.WriteSTLstring(";
930 fs <<
"&(" << accname <<
")";
931 fs <<
");" << std::endl;
935 default:
fs <<
"/* argument not supported */" << std::endl;
963 std::vector<std::string> splitName;
982 default:
return false;
985 for (
int n = 0;
n < narg;
n++) {
999 int pstar = buf.
Index(
"*");
1004 while ((pstar > 0) && (buf[pstar] ==
' '))
1008 isargptr[
n] =
false;
1010 if (buf.
Index(
"const ") == 0) {
1012 while ((buf.
Length() > 0) && (buf[0] ==
' '))
1019 else if (buf ==
"string")
1034 Bool_t akaarrayaccess = (narg == 1) && (argtype[0] < 20);
1036 char tabs[30], tabs2[30];
1040 fs <<
tab2 <<
"if (buf.StartSTLnode(\"" <<
fXmlSetup.XmlGetElementName(el) <<
"\")) {" << std::endl;
1048 accname =
"(*cont)->";
1064 fs <<
"*dynamic_cast<" << contcl->
GetName() <<
"*>(obj);" << std::endl;
1069 strlcpy(tabs,
tab4,
sizeof(tabs));
1072 strlcpy(tabs,
tab3,
sizeof(tabs));
1074 strlcpy(tabs2, tabs,
sizeof(tabs2));
1077 strlcat(tabs2,
tab1,
sizeof(tabs2));
1078 fs << tabs <<
"if (" << (isarr ?
"*cont" :
"cont") <<
"==0) {" << std::endl;
1079 fs << tabs2 <<
"buf.WriteSTLsize(0" << (isstr ?
",true);" :
");") << std::endl;
1080 fs << tabs <<
"} else {" << std::endl;
1083 fs << tabs2 <<
"buf.WriteSTLsize(" << accname << (isstr ?
"length(), true);" :
"size());") << std::endl;
1086 fs << tabs2 <<
"buf.WriteSTLstringData(" << accname <<
"c_str());" << std::endl;
1088 if (akaarrayaccess) {
1089 fs << tabs2 << argtname[0] <<
"* arr = new " << argtname[0] <<
"[" << accname <<
"size()];" << std::endl;
1090 fs << tabs2 <<
"int k = 0;" << std::endl;
1093 fs << tabs2 << contcl->
GetName() <<
"::const_iterator iter;" << std::endl;
1094 fs << tabs2 <<
"for (iter = " << accname <<
"begin(); iter != " << accname <<
"end(); iter++)";
1095 if (akaarrayaccess) {
1096 fs << std::endl << tabs2 <<
tab1 <<
"arr[k++] = *iter;" << std::endl;
1097 fs << tabs2 <<
"buf.WriteArray(arr, " << accname <<
"size(), 0, false);" << std::endl;
1098 fs << tabs2 <<
"delete[] arr;" << std::endl;
1099 }
else if (narg == 1) {
1100 fs << std::endl << tabs2 <<
tab1;
1101 WriteSTLarg(
fs,
"*iter", argtype[0], isargptr[0], argcl[0]);
1102 }
else if (narg == 2) {
1103 fs <<
" {" << std::endl;
1105 WriteSTLarg(
fs,
"iter->first", argtype[0], isargptr[0], argcl[0]);
1107 WriteSTLarg(
fs,
"iter->second", argtype[1], isargptr[1], argcl[1]);
1108 fs << tabs2 <<
"}" << std::endl;
1113 fs << tabs <<
"}" << std::endl;
1117 fs << tabs <<
"cont++;" << std::endl;
1119 fs << tabs <<
"(void*) cont = (char*) cont + sizeof(" << contcl->
GetName() <<
");" << std::endl;
1120 fs <<
tab3 <<
"}" << std::endl;
1123 fs <<
tab3 <<
"buf.EndSTLnode();" << std::endl;
1124 fs <<
tab2 <<
"}" << std::endl;
1128 fs <<
tab2 <<
"if (buf.VerifySTLnode(\"" <<
fXmlSetup.XmlGetElementName(el) <<
"\")) {" << std::endl;
1135 accname =
"(*cont)->";
1153 fs <<
"*dynamic_cast<" << contcl->
GetName() <<
"*>(obj);" << std::endl;
1158 strlcpy(tabs,
tab4,
sizeof(tabs));
1161 strlcpy(tabs,
tab3,
sizeof(tabs));
1163 fs << tabs <<
"int size = buf.ReadSTLsize(" << (isstr ?
"true);" :
");") << std::endl;
1166 fs << tabs <<
"delete " << accptr <<
";" << std::endl;
1167 fs << tabs <<
"if (size==0) " << accptr <<
" = 0;" << std::endl;
1168 fs << tabs <<
" else " << accptr <<
" = new " << contcl->
GetName() <<
";" << std::endl;
1172 fs <<
"cont" << endch <<
";" << std::endl;
1175 fs << tabs << accname << (isstr ?
"erase();" :
"clear();") << std::endl;
1179 fs << tabs <<
"if (size>0) " << accname <<
"assign(buf.ReadSTLstringData(size));" << std::endl;
1181 if (akaarrayaccess) {
1182 fs << tabs << argtname[0] <<
"* arr = new " << argtname[0] <<
"[size];" << std::endl;
1183 fs << tabs <<
"buf.ReadArray(arr, size, 0, false);" << std::endl;
1186 fs << tabs <<
"for(int k=0;k<size;k++)";
1188 if (akaarrayaccess) {
1189 fs << std::endl << tabs <<
tab1 << accname;
1194 fs <<
"(arr[k]);" << std::endl;
1195 fs << tabs <<
"delete[] arr;" << std::endl;
1196 }
else if (narg == 1) {
1198 fs <<
" {" << std::endl << tabs <<
tab1;
1199 ReadSTLarg(
fs, arg1, argtype[0], isargptr[0], argcl[0], argtname[0], ifcond);
1202 fs <<
"if (" << ifcond <<
") ";
1208 fs <<
"(" << arg1 <<
");" << std::endl;
1209 fs << tabs <<
"}" << std::endl;
1210 }
else if (narg == 2) {
1211 TString arg1(
"arg1"), arg2(
"arg2"), ifcond;
1212 fs <<
" {" << std::endl << tabs <<
tab1;
1213 ReadSTLarg(
fs, arg1, argtype[0], isargptr[0], argcl[0], argtname[0], ifcond);
1215 ReadSTLarg(
fs, arg2, argtype[1], isargptr[1], argcl[1], argtname[1], ifcond);
1218 fs <<
"if (" << ifcond <<
") ";
1219 fs << accname <<
"insert(make_pair(" << arg1 <<
", " << arg2 <<
"));" << std::endl;
1220 fs << tabs <<
"}" << std::endl;
1226 fs << tabs <<
"cont++;" << std::endl;
1228 fs << tabs <<
"(void*) cont = (char*) cont + sizeof(" << contcl->
GetName() <<
");" << std::endl;
1229 fs <<
tab3 <<
"}" << std::endl;
1232 fs <<
tab3 <<
"buf.EndSTLnode();" << std::endl;
1233 fs <<
tab2 <<
"}" << std::endl;
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
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
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
TObject()
TObject constructor.
const char * GetCountName() const
Describe one element (data member) to be Streamed.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element and updates fClassObject.
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,...
TClass * GetClassPointer() const override
Returns a pointer to the TClass of this element.
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.
@ kUChar
Equal to TDataType's kchar.
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 setter method
const char * ElementGetter(TClass *cl, const char *membername, int specials=0)
produce code to access member of given class.
TXMLSetup fXmlSetup
! buffer for xml names conversion
~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.
TString fGetterName
! buffer for name of getter method
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.
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.