From d45d211053bf57c91a3e6e6ad92883dbaf676eb5 Mon Sep 17 00:00:00 2001 From: Fons Rademakers <Fons.Rademakers@cern.ch> Date: Mon, 1 Jul 2002 22:56:04 +0000 Subject: [PATCH] fix problem where for some classes the DeclFile was still given as include/ instead of, e.g. base/inc. This was due to the search path being -Iinclude and not -Ibase/inc (this special seach path is only used in rootcint_tmp used to build ROOT's own dictionaries). Also reorder two linkdef files to avoid search for not yet loaded classes. Also some reformatting of recently introduced non-coding style conforming code. git-svn-id: http://root.cern.ch/svn/root/trunk@4802 27541ba8-7e3a-0410-8455-c3a389f83636 --- base/inc/LinkDef2.h | 4 +- cont/inc/LinkDef.h | 6 +- utils/src/rootcint.cxx | 1009 ++++++++++++++++++++-------------------- 3 files changed, 518 insertions(+), 501 deletions(-) diff --git a/base/inc/LinkDef2.h b/base/inc/LinkDef2.h index 2d45843599e..74b1d089135 100644 --- a/base/inc/LinkDef2.h +++ b/base/inc/LinkDef2.h @@ -1,4 +1,4 @@ -/* @(#)root/base:$Name: $:$Id: LinkDef2.h,v 1.16 2002/03/15 17:23:40 rdm Exp $ */ +/* @(#)root/base:$Name: $:$Id: LinkDef2.h,v 1.17 2002/03/25 20:21:06 brun Exp $ */ /************************************************************************* * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * @@ -45,6 +45,7 @@ #pragma link C++ function ConnectCINT(TQObject*,char*,char*); +#pragma link C++ class TMath; #pragma link C++ class TExec+; #pragma link C++ class TFolder+; #pragma link C++ class TFree; @@ -52,7 +53,6 @@ #pragma link C++ class TKeyMapFile; #pragma link C++ class TMapFile; #pragma link C++ class TMapRec; -#pragma link C++ class TMath; #pragma link C++ class TMD5+; #pragma link C++ class TMemberInspector; #pragma link C++ class TMessageHandler+; diff --git a/cont/inc/LinkDef.h b/cont/inc/LinkDef.h index fbdfdcddc50..c4625195a32 100644 --- a/cont/inc/LinkDef.h +++ b/cont/inc/LinkDef.h @@ -1,4 +1,4 @@ -/* @(#)root/cont:$Name: $:$Id: LinkDef.h,v 1.4 2001/05/21 11:18:02 rdm Exp $ */ +/* @(#)root/cont:$Name: $:$Id: LinkDef.h,v 1.5 2001/10/03 19:55:26 brun Exp $ */ /************************************************************************* * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * @@ -27,18 +27,18 @@ #pragma link C++ class TArrayL-!; #pragma link C++ class TArrayS-!; #pragma link C++ class TBits+; +#pragma link C++ class TCollection-; #pragma link C++ class TBtree-; #pragma link C++ class TBtreeIter; #pragma link C++ class TClassTable; #pragma link C++ class TClonesArray-; -#pragma link C++ class TCollection-; -#pragma link C++ class THashList; #pragma link C++ class THashTable; #pragma link C++ class THashTableIter; #pragma link C++ class TIter; #pragma link C++ class TIterator; #pragma link C++ class TList-; #pragma link C++ class TListIter; +#pragma link C++ class THashList; #pragma link C++ class TMap-; #pragma link C++ class TMapIter; #pragma link C++ class TAssoc; diff --git a/utils/src/rootcint.cxx b/utils/src/rootcint.cxx index b1e31210a93..5e5bea7ad7a 100644 --- a/utils/src/rootcint.cxx +++ b/utils/src/rootcint.cxx @@ -1,4 +1,4 @@ -// @(#)root/utils:$Name: $:$Id: rootcint.cxx,v 1.86 2002/07/01 06:40:09 brun Exp $ +// @(#)root/utils:$Name: $:$Id: rootcint.cxx,v 1.87 2002/07/01 16:19:20 brun Exp $ // Author: Fons Rademakers 13/07/96 /************************************************************************* @@ -282,7 +282,7 @@ void LevelPrint(bool prefix, int level, const char *location, if (level >= kInfo) type = "Info"; if (level >= kNote) - type = "Note"; + type = "Note"; if (level >= kWarning) type = "Warning"; if (level >= kError) @@ -417,7 +417,6 @@ bool CheckInputOperator(G__ClassInfo &cl) return has_input_error; } - //______________________________________________________________________________ int GetClassVersion(G__ClassInfo &cl) { @@ -436,8 +435,8 @@ int GetClassVersion(G__ClassInfo &cl) } //______________________________________________________________________________ -int NeedTemplateKeyword(G__ClassInfo &cl) { - +int NeedTemplateKeyword(G__ClassInfo &cl) +{ if (cl.IsTmplt()) { char *templatename = StrDup(cl.Fullname()); char *loc = strstr(templatename, "<"); @@ -483,15 +482,15 @@ int NeedTemplateKeyword(G__ClassInfo &cl) { } //______________________________________________________________________________ -bool NeedShadowClass(G__ClassInfo& cl) { - +bool NeedShadowClass(G__ClassInfo& cl) +{ return (!cl.HasMethod("ShowMembers") && (cl.RootFlag() & G__USEBYTECOUNT)) || (cl.HasMethod("ShowMembers") && cl.IsTmplt()); } //______________________________________________________________________________ -void AddShadowClassName(string& buffer, G__ClassInfo &cl) { - +void AddShadowClassName(string& buffer, G__ClassInfo &cl) +{ G__ClassInfo class_obj = cl.EnclosingClass(); if (class_obj.IsValid()) { AddShadowClassName(buffer, class_obj); @@ -501,7 +500,8 @@ void AddShadowClassName(string& buffer, G__ClassInfo &cl) { } //______________________________________________________________________________ -const char *GetFullShadowName(G__ClassInfo &cl) { +const char *GetFullShadowName(G__ClassInfo &cl) +{ static string shadowName; shadowName = "ROOT::Shadow::"; @@ -680,135 +680,142 @@ void WriteStringOperators(FILE *fd) fprintf(fd, " return b;\n"); fprintf(fd, "}\n"); } + //______________________________________________________________________________ int ElementStreamer(G__TypeInfo &ti,const char *R__t,int rwmode,const char *tcl=0) { - enum {G___BIT_ISTOBJECT = 0x10000000, - G___BIT_ISTREAMER = 0x20000000, - G___BIT_ISSTRING = 0x40000000}; + enum { + R__BIT_ISTOBJECT = 0x10000000, + R__BIT_HASSTREAMER = 0x20000000, + R__BIT_ISSTRING = 0x40000000 + }; long P = ti.Property(); char tiName[512],tiFullname[512],objType[512]; strcpy(tiName,ti.Name()); strcpy(objType,ShortTypeName(tiName)); - if(ti.Fullname()) - strcpy(tiFullname,ti.Fullname()); + if (ti.Fullname()) + strcpy(tiFullname,ti.Fullname()); else - tiFullname[0] = 0; + tiFullname[0] = 0; int isTObj = (ti.IsBase("TObject") || !strcmp(tiFullname, "TObject")); int isStre = (ti.HasMethod("Streamer")); long kase = P & (G__BIT_ISPOINTER|G__BIT_ISFUNDAMENTAL|G__BIT_ISENUM); - if (isTObj) kase |=G___BIT_ISTOBJECT; - if (strcmp("string" ,tiName)==0) kase |=G___BIT_ISSTRING; - if (strcmp("string*",tiName)==0) kase |=G___BIT_ISSTRING; - if (isStre) kase |=G___BIT_ISTREAMER; - + if (isTObj) kase |= R__BIT_ISTOBJECT; + if (strcmp("string" ,tiName)==0) kase |= R__BIT_ISSTRING; + if (strcmp("string*",tiName)==0) kase |= R__BIT_ISSTRING; + if (isStre) kase |= R__BIT_HASSTREAMER; if (rwmode == 0 ) { //Read mode -// - if (R__t) fprintf(fp, " %s %s;\n",tiName,R__t); - switch (kase) { - - case G__BIT_ISFUNDAMENTAL:; - if (!R__t) return 0; - fprintf(fp, " R__b >> %s;\n",R__t); - break; - case G__BIT_ISPOINTER|G___BIT_ISTOBJECT|G___BIT_ISTREAMER:; - if (!R__t) return 1; - fprintf(fp, " %s = (%s)R__b.ReadObject(%s);\n",R__t,tiName,tcl); - break; - - case G__BIT_ISENUM:; - if (!R__t) return 0; - fprintf(fp, " R__b >> (Int_t&)%s;\n",R__t); - break; + if (R__t) fprintf(fp, " %s %s;\n",tiName,R__t); + switch (kase) { - case G___BIT_ISTREAMER:; - case G___BIT_ISTREAMER|G___BIT_ISTOBJECT:; - if (!R__t) return 0; - fprintf(fp, " %s.Streamer(R__b);\n",R__t); - break; + case G__BIT_ISFUNDAMENTAL: + if (!R__t) return 0; + fprintf(fp, " R__b >> %s;\n",R__t); + break; - case G___BIT_ISTREAMER|G__BIT_ISPOINTER:; - if (!R__t) return 0; - fprintf(fp, " %s = new %s;\n",R__t,objType); - fprintf(fp, " %s->Streamer(R__b);\n",R__t); - break; - case G___BIT_ISSTRING:; - if (!R__t) return 0; - fprintf(fp, " {TString R__str;\n"); - fprintf(fp, " R__str.Streamer(R__b);\n"); - fprintf(fp, " %s = R__str.Data();}\n",R__t); - break; - case G___BIT_ISSTRING|G__BIT_ISPOINTER:; - if (!R__t) return 0; - fprintf(fp, " {TString R__str;\n"); - fprintf(fp, " R__str.Streamer(R__b);\n"); - fprintf(fp, " %s = new string(R__str.Data());}\n",R__t); - break; + case G__BIT_ISPOINTER|R__BIT_ISTOBJECT|R__BIT_HASSTREAMER: + if (!R__t) return 1; + fprintf(fp, " %s = (%s)R__b.ReadObject(%s);\n",R__t,tiName,tcl); + break; - case G__BIT_ISPOINTER:; - if (!R__t) return 1; - fprintf(fp, " %s = (%s)R__b.ReadObject(%s);\n",R__t,tiName,tcl); - break; + case G__BIT_ISENUM: + if (!R__t) return 0; + fprintf(fp, " R__b >> (Int_t&)%s;\n",R__t); + break; - default: - if (!R__t) return 1; - fprintf(fp, " R__b.StreamObject(&%s,%s);\n",R__t,tcl); - break; - } + case R__BIT_HASSTREAMER: + case R__BIT_HASSTREAMER|R__BIT_ISTOBJECT: + if (!R__t) return 0; + fprintf(fp, " %s.Streamer(R__b);\n",R__t); + break; + + case R__BIT_HASSTREAMER|G__BIT_ISPOINTER: + if (!R__t) return 0; + fprintf(fp, " %s = new %s;\n",R__t,objType); + fprintf(fp, " %s->Streamer(R__b);\n",R__t); + break; + + case R__BIT_ISSTRING: + if (!R__t) return 0; + fprintf(fp, " {TString R__str;\n"); + fprintf(fp, " R__str.Streamer(R__b);\n"); + fprintf(fp, " %s = R__str.Data();}\n",R__t); + break; + + case R__BIT_ISSTRING|G__BIT_ISPOINTER: + if (!R__t) return 0; + fprintf(fp, " {TString R__str;\n"); + fprintf(fp, " R__str.Streamer(R__b);\n"); + fprintf(fp, " %s = new string(R__str.Data());}\n",R__t); + break; + + case G__BIT_ISPOINTER: + if (!R__t) return 1; + fprintf(fp, " %s = (%s)R__b.ReadObject(%s);\n",R__t,tiName,tcl); + break; + + default: + if (!R__t) return 1; + fprintf(fp, " R__b.StreamObject(&%s,%s);\n",R__t,tcl); + break; + } } else { //Write case - switch (kase) { + switch (kase) { - case G__BIT_ISFUNDAMENTAL:; - case G__BIT_ISPOINTER|G___BIT_ISTOBJECT|G___BIT_ISTREAMER:; - if (!R__t) return 0; - fprintf(fp, " R__b << %s;\n",R__t); - break; + case G__BIT_ISFUNDAMENTAL: + case G__BIT_ISPOINTER|R__BIT_ISTOBJECT|R__BIT_HASSTREAMER: + if (!R__t) return 0; + fprintf(fp, " R__b << %s;\n",R__t); + break; - case G__BIT_ISENUM:; - if (!R__t) return 0; - fprintf(fp, " R__b << (Int_t&)%s;\n",R__t); - break; + case G__BIT_ISENUM: + if (!R__t) return 0; + fprintf(fp, " R__b << (Int_t&)%s;\n",R__t); + break; - case G___BIT_ISTREAMER:; - case G___BIT_ISTREAMER|G___BIT_ISTOBJECT:; - if (!R__t) return 0; - fprintf(fp, " ((%s&)%s).Streamer(R__b);\n",objType,R__t); - break; + case R__BIT_HASSTREAMER: + case R__BIT_HASSTREAMER|R__BIT_ISTOBJECT: + if (!R__t) return 0; + fprintf(fp, " ((%s&)%s).Streamer(R__b);\n",objType,R__t); + break; - case G___BIT_ISTREAMER|G__BIT_ISPOINTER:; - if (!R__t) return 0; - fprintf(fp, " ((%s*)%s)->Streamer(R__b);\n",objType,R__t); - break; - case G___BIT_ISSTRING:; - if (!R__t) return 0; - fprintf(fp, " {TString R__str(%s.c_str());\n",R__t); - fprintf(fp, " R__str.Streamer(R__b);};\n"); - break; - case G___BIT_ISSTRING|G__BIT_ISPOINTER:; - if (!R__t) return 0; - fprintf(fp, " {TString R__str(%s->c_str());\n",R__t); - fprintf(fp, " R__str.Streamer(R__b);}\n"); - break; + case R__BIT_HASSTREAMER|G__BIT_ISPOINTER: + if (!R__t) return 0; + fprintf(fp, " ((%s*)%s)->Streamer(R__b);\n",objType,R__t); + break; - case G__BIT_ISPOINTER:; - if (!R__t) return 1; - fprintf(fp, " R__b.WriteObject(%s,%s);\n",R__t,tcl); - break; + case R__BIT_ISSTRING: + if (!R__t) return 0; + fprintf(fp, " {TString R__str(%s.c_str());\n",R__t); + fprintf(fp, " R__str.Streamer(R__b);};\n"); + break; - default: - if (!R__t) return 1; - fprintf(fp, " R__b.StreamObject((%s*)&%s,%s);\n",objType,R__t,tcl); - break; - } + case R__BIT_ISSTRING|G__BIT_ISPOINTER: + if (!R__t) return 0; + fprintf(fp, " {TString R__str(%s->c_str());\n",R__t); + fprintf(fp, " R__str.Streamer(R__b);}\n"); + break; + + case G__BIT_ISPOINTER: + if (!R__t) return 1; + fprintf(fp, " R__b.WriteObject(%s,%s);\n",R__t,tcl); + break; + + default: + if (!R__t) return 1; + fprintf(fp, " R__b.StreamObject((%s*)&%s,%s);\n",objType,R__t,tcl); + break; + } } return 0; } + //______________________________________________________________________________ int STLContainerStreamer(G__DataMemberInfo &m, int rwmode) { @@ -821,8 +828,8 @@ int STLContainerStreamer(G__DataMemberInfo &m, int rwmode) int isArr = 0; int len = 1; if (m.Property() & G__BIT_ISARRAY) { - isArr = 1; - for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); + isArr = 1; + for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); } char stlType[512]; @@ -834,14 +841,14 @@ int STLContainerStreamer(G__DataMemberInfo &m, int rwmode) const char *tcl1=0,*tcl2=0; G__TypeInfo &ti = TemplateArg(m); if (ElementStreamer(ti,0,rwmode)) { - tcl1="R__tcl1"; - strcpy(fulName1,ti.Fullname()); + tcl1="R__tcl1"; + strcpy(fulName1,ti.Fullname()); } if (stltype==kMap || stltype==kMultimap) { G__TypeInfo &ti = TemplateArg(m,1); if (ElementStreamer(ti,0,rwmode)) { - tcl2="R__tcl2"; - strcpy(fulName2,ti.Fullname()); + tcl2="R__tcl2"; + strcpy(fulName2,ti.Fullname()); } } @@ -855,27 +862,26 @@ int STLContainerStreamer(G__DataMemberInfo &m, int rwmode) } switch (pa) { - case 0:; //No pointer && No array - fprintf(fp, " %s &R__stl = %s;\n",stlType,stlName); - break; - case 1:; //No pointer && array - fprintf(fp, " %s &R__stl = %s[R__l];\n",stlType,stlName); - break; - case 2:; //pointer && No array - fprintf(fp, " delete *%s;\n",stlName); - fprintf(fp, " *%s = new %s;\n",stlName , stlType); - fprintf(fp, " %s &R__stl = **%s;\n",stlType,stlName); - break; - case 3:; //pointer && array - fprintf(fp, " delete %s[R__l];\n",stlName); - fprintf(fp, " %s[R__l] = new %s;\n",stlName , stlType); - fprintf(fp, " %s &R__stl = *%s[R__l];\n",stlType,stlName); - break; + case 0: //No pointer && No array + fprintf(fp, " %s &R__stl = %s;\n",stlType,stlName); + break; + case 1: //No pointer && array + fprintf(fp, " %s &R__stl = %s[R__l];\n",stlType,stlName); + break; + case 2: //pointer && No array + fprintf(fp, " delete *%s;\n",stlName); + fprintf(fp, " *%s = new %s;\n",stlName , stlType); + fprintf(fp, " %s &R__stl = **%s;\n",stlType,stlName); + break; + case 3: //pointer && array + fprintf(fp, " delete %s[R__l];\n",stlName); + fprintf(fp, " %s[R__l] = new %s;\n",stlName , stlType); + fprintf(fp, " %s &R__stl = *%s[R__l];\n",stlType,stlName); + break; } fprintf(fp, " R__stl.clear();\n"); - if (tcl1) fprintf(fp, " TClass *R__tcl1 = TBuffer::GetClass(typeid(%s));\n",fulName1); if (tcl2) fprintf(fp, " TClass *R__tcl2 = TBuffer::GetClass(typeid(%s));\n",fulName2); @@ -883,80 +889,83 @@ int STLContainerStreamer(G__DataMemberInfo &m, int rwmode) fprintf(fp, " R__b >> R__n;\n"); if (stltype==kVector) { - fprintf(fp," R__stl.reserve(R__n);\n"); + fprintf(fp," R__stl.reserve(R__n);\n"); } fprintf(fp, " for (R__i = 0; R__i < R__n; R__i++) {\n"); ElementStreamer(TemplateArg(m),"R__t",rwmode,tcl1); - if (stltype == kMap || stltype == kMultimap) {//Second Arg - ElementStreamer(TemplateArg(m,1),"R__t2",rwmode,tcl2);} + if (stltype == kMap || stltype == kMultimap) { //Second Arg + ElementStreamer(TemplateArg(m,1),"R__t2",rwmode,tcl2); + } switch (stltype) { - case kMap:; - case kMultimap:; - fprintf(fp, " R__stl.insert(make_pair(R__t,R__t2));\n"); - break; - case kSet:; - case kMultiset:; - fprintf(fp, " R__stl.insert(R__t);\n"); - break; - case kVector:; - case kList:; - case kDeque:; - fprintf(fp, " R__stl.push_back(R__t);\n"); - break; - - default:; + case kMap: + case kMultimap: + fprintf(fp, " R__stl.insert(make_pair(R__t,R__t2));\n"); + break; + case kSet: + case kMultiset: + fprintf(fp, " R__stl.insert(R__t);\n"); + break; + case kVector: + case kList: + case kDeque: + fprintf(fp, " R__stl.push_back(R__t);\n"); + break; + + default: assert(0); - } - fprintf(fp, " }\n"); - fprintf(fp, " }\n"); - if (isArr) fprintf(fp, " }\n"); - } else { //Write mode - - // create write code - if (isArr) { - fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); - } - fprintf(fp, " {\n"); + } + fprintf(fp, " }\n"); + fprintf(fp, " }\n"); + if (isArr) fprintf(fp, " }\n"); + + } else { + + // create write code + if (isArr) { + fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); + } + fprintf(fp, " {\n"); switch (pa) { - case 0:; //No pointer && No array - fprintf(fp, " %s &R__stl = %s;\n",stlType,stlName); - break; - case 1:; //No pointer && array - fprintf(fp, " %s &R__stl = %s[R__l];\n",stlType,stlName); - break; - case 2:; //pointer && No array - fprintf(fp, " %s &R__stl = **%s;\n",stlType,stlName); - break; - case 3:; //pointer && array - fprintf(fp, " %s &R__stl = *%s[R__l];\n",stlType,stlName); - break; + case 0: //No pointer && No array + fprintf(fp, " %s &R__stl = %s;\n",stlType,stlName); + break; + case 1: //No pointer && array + fprintf(fp, " %s &R__stl = %s[R__l];\n",stlType,stlName); + break; + case 2: //pointer && No array + fprintf(fp, " %s &R__stl = **%s;\n",stlType,stlName); + break; + case 3: //pointer && array + fprintf(fp, " %s &R__stl = *%s[R__l];\n",stlType,stlName); + break; } - fprintf(fp, " int R__n=(&R__stl) ? int(R__stl.size()) : 0;\n"); - fprintf(fp, " R__b << R__n;\n"); - fprintf(fp, " if(!R__n) return;\n"); - - if (tcl1) fprintf(fp, " TClass *R__tcl1 = TBuffer::GetClass(typeid(%s));\n",fulName1); - if (tcl2) fprintf(fp, " TClass *R__tcl2 = TBuffer::GetClass(typeid(%s));\n",fulName2); - fprintf(fp, " %s::iterator R__k;\n", stlType); - fprintf(fp, " for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {\n"); - if (stltype == kMap || stltype == kMultimap) { - ElementStreamer(TemplateArg(m,0),"((*R__k).first )",rwmode,tcl1); - ElementStreamer(TemplateArg(m,1),"((*R__k).second)",rwmode,tcl2); - } else { - ElementStreamer(TemplateArg(m,0),"(*R__k)" ,rwmode,tcl1); - } - - fprintf(fp, " }\n"); - fprintf(fp, " }\n"); - if (isArr) fprintf(fp, " }\n"); - } - return 1; + fprintf(fp, " int R__n=(&R__stl) ? int(R__stl.size()) : 0;\n"); + fprintf(fp, " R__b << R__n;\n"); + fprintf(fp, " if(!R__n) return;\n"); + + if (tcl1) fprintf(fp, " TClass *R__tcl1 = TBuffer::GetClass(typeid(%s));\n",fulName1); + if (tcl2) fprintf(fp, " TClass *R__tcl2 = TBuffer::GetClass(typeid(%s));\n",fulName2); + fprintf(fp, " %s::iterator R__k;\n", stlType); + fprintf(fp, " for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {\n"); + if (stltype == kMap || stltype == kMultimap) { + ElementStreamer(TemplateArg(m,0),"((*R__k).first )",rwmode,tcl1); + ElementStreamer(TemplateArg(m,1),"((*R__k).second)",rwmode,tcl2); + } else { + ElementStreamer(TemplateArg(m,0),"(*R__k)" ,rwmode,tcl1); + } + + fprintf(fp, " }\n"); + fprintf(fp, " }\n"); + if (isArr) fprintf(fp, " }\n"); + } + return 1; } +//______________________________________________________________________________ int STLStringStreamer(G__DataMemberInfo &m, int rwmode) { // Create Streamer code for a standard string object. Returns 1 if data @@ -1258,50 +1267,49 @@ void WriteClassFunctions(G__ClassInfo &cl, int tmplt = 0) fprintf(fp, "//_______________________________________"); fprintf(fp, "_______________________________________\n"); - fprintf(fp, "// Static variable to hold class pointer\n"); if (add_template_keyword) fprintf(fp, "template <> "); - fprintf(fp, "TClass *%s::fgIsA = 0;\n", cl.Fullname()); + fprintf(fp, "TClass *%s::fgIsA = 0; // static to hold class pointer\n", + cl.Fullname()); fprintf(fp, "\n"); fprintf(fp, "//_______________________________________"); fprintf(fp, "_______________________________________\n"); if (add_template_keyword) fprintf(fp, "template <> "); fprintf(fp, "const char *%s::Class_Name()\n{\n", cl.Fullname()); - fprintf(fp, " // Return the class name for %s.\n", cl.Fullname()); fprintf(fp, " return \"%s\";\n}\n\n", cl.Fullname()); - if (1 || !cl.IsTmplt()) { - // If the class is not templated and has a ClassDef, - // a ClassImp is required and already defines those function: - - fprintf(fp, "//_______________________________________"); - fprintf(fp, "_______________________________________\n"); - if (add_template_keyword) fprintf(fp, "template <> "); - fprintf(fp, "const char *%s::ImplFileName()\n{\n", cl.Fullname()); - fprintf(fp, " return ROOT::GenerateInitInstance((const %s*)0x0)->GetImplFileName();\n}\n\n", - cl.Fullname()); - - fprintf(fp, "//_______________________________________"); - fprintf(fp, "_______________________________________\n"); - if (add_template_keyword) fprintf(fp, "template <> "); - fprintf(fp, "int %s::ImplFileLine()\n{\n", cl.Fullname()); - fprintf(fp, " return ROOT::GenerateInitInstance((const %s*)0x0)->GetImplFileLine();\n}\n\n", - cl.Fullname()); - - fprintf(fp, "//_______________________________________"); - fprintf(fp, "_______________________________________\n"); - if (add_template_keyword) fprintf(fp, "template <> "); - fprintf(fp, "void %s::Dictionary()\n{\n", cl.Fullname()); - fprintf(fp, " fgIsA = ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n", cl.Fullname()); - fprintf(fp, "}\n\n"); - - fprintf(fp, "//_______________________________________"); - fprintf(fp, "_______________________________________\n"); - if (add_template_keyword) fprintf(fp, "template <> "); - fprintf(fp, "TClass *%s::Class()\n{\n", cl.Fullname()); - fprintf(fp, " if (!fgIsA) fgIsA = ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n", cl.Fullname()); - fprintf(fp, " return fgIsA;\n}\n\n"); - } + if (1 || !cl.IsTmplt()) { + // If the class is not templated and has a ClassDef, + // a ClassImp is required and already defines those function: + + fprintf(fp, "//_______________________________________"); + fprintf(fp, "_______________________________________\n"); + if (add_template_keyword) fprintf(fp, "template <> "); + fprintf(fp, "const char *%s::ImplFileName()\n{\n", cl.Fullname()); + fprintf(fp, " return ROOT::GenerateInitInstance((const %s*)0x0)->GetImplFileName();\n}\n\n", + cl.Fullname()); + + fprintf(fp, "//_______________________________________"); + fprintf(fp, "_______________________________________\n"); + if (add_template_keyword) fprintf(fp, "template <> "); + fprintf(fp, "int %s::ImplFileLine()\n{\n", cl.Fullname()); + fprintf(fp, " return ROOT::GenerateInitInstance((const %s*)0x0)->GetImplFileLine();\n}\n\n", + cl.Fullname()); + + fprintf(fp, "//_______________________________________"); + fprintf(fp, "_______________________________________\n"); + if (add_template_keyword) fprintf(fp, "template <> "); + fprintf(fp, "void %s::Dictionary()\n{\n", cl.Fullname()); + fprintf(fp, " fgIsA = ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n", cl.Fullname()); + fprintf(fp, "}\n\n"); + + fprintf(fp, "//_______________________________________"); + fprintf(fp, "_______________________________________\n"); + if (add_template_keyword) fprintf(fp, "template <> "); + fprintf(fp, "TClass *%s::Class()\n{\n", cl.Fullname()); + fprintf(fp, " if (!fgIsA) fgIsA = ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n", cl.Fullname()); + fprintf(fp, " return fgIsA;\n}\n\n"); + } } //______________________________________________________________________________ @@ -1318,7 +1326,7 @@ void WriteClassInit(G__ClassInfo &cl) fprintf(fp, " TClass *%s_IsA(const void*);\n\n",G__map_cpp_name((char *)cl.Fullname())); - fprintf(fp, " // Function generating the singleton Type initializer\n"); + fprintf(fp, " // Function generating the singleton type initializer\n"); // fprintf(fp, " template <> ROOT::ClassInfo< %s > *GenerateInitInstance< %s >(const %s*)\n {\n", // cl.Fullname(), cl.Fullname(), cl.Fullname() ); @@ -1335,11 +1343,10 @@ void WriteClassInit(G__ClassInfo &cl) fprintf(fp, " TGenericClassInfo *GenerateInitInstance(const %s*)\n {\n", cl.Fullname()); - if (NeedShadowClass(cl)) { fprintf(fp, " // Make sure the shadow class has the right sizeof\n"); fprintf(fp, " Assert(sizeof(::%s)", cl.Fullname() ); - fprintf(fp, "==sizeof(%s));\n", GetFullShadowName(cl)); + fprintf(fp, " == sizeof(%s));\n", GetFullShadowName(cl)); } fprintf(fp, " %s *ptr = 0;\n",cl.Fullname()); @@ -1352,8 +1359,7 @@ void WriteClassInit(G__ClassInfo &cl) fprintf(fp, "%s::Class_Version(),",cl.Fullname()); } else { // if (cl.RootFlag() & G__USEBYTECOUNT ) { - // Need to find out if the operator>> is actually defined for - // this class. + // Need to find out if the operator>> is actually defined for this class. G__ClassInfo gcl; long offset; const char* VersionFunc = "GetClassVersion"; @@ -1367,7 +1373,7 @@ void WriteClassInit(G__ClassInfo &cl) if (methodinfo.IsValid() && // methodinfo.ifunc()->para_p_tagtable[methodinfo.Index()][0] == cl.Tagnum() && - strstr(methodinfo.FileName(),"Rtypes.h")==0 ) { + strstr(methodinfo.FileName(),"Rtypes.h") == 0) { // GetClassVersion was defined in the header file. //fprintf(fp, "GetClassVersion((%s *)0x0), ",cl.Fullname()); @@ -1377,8 +1383,8 @@ void WriteClassInit(G__ClassInfo &cl) //sprintf(temporary,"GetClassVersion<%s>( (%s *) 0x0 )",cl.Fullname(),cl.Fullname()); //fprintf(stderr,"DEBUG: %s has value %d\n",cl.Fullname(),(int)G__int(G__calc(temporary))); } - char * filename = (char*)cl.FileName(); - for(unsigned int i=0; i<strlen(filename); i++) { + char *filename = (char*)cl.FileName(); + for (unsigned int i=0; i<strlen(filename); i++) { if (filename[i]=='\\') filename[i]='/'; } fprintf(fp, "\"%s\",%d,\n",filename,cl.LineNumber()); @@ -1409,10 +1415,10 @@ void WriteClassInit(G__ClassInfo &cl) // fprintf(fp, " static ROOT::ClassInfo< %s > &_R__UNIQUE_(Init)\n", // cl.Fullname() ); fprintf(fp, " static ROOT::TGenericClassInfo *_R__UNIQUE_(Init)\n" ); - fprintf(fp, " = GenerateInitInstance((const %s*)0x0);\n\n", cl.Fullname()); + fprintf(fp, " = GenerateInitInstance((const %s*)0x0);\n", cl.Fullname()); if (!cl.HasMethod("Dictionary") || cl.IsTmplt()) { - fprintf(fp, " // Dictionary for non-ClassDef classes\n"); + fprintf(fp, "\n // Dictionary for non-ClassDef classes\n"); fprintf(fp, " void %s_Dictionary() {\n",G__map_cpp_name((char *)cl.Fullname())); fprintf(fp, " ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n",cl.Fullname()); fprintf(fp, " }\n\n"); @@ -1422,11 +1428,10 @@ void WriteClassInit(G__ClassInfo &cl) fprintf(fp, " // Return the actual TClass for the object argument\n"); fprintf(fp, " TClass *%s_IsA(const void* obj) {\n",G__map_cpp_name((char *)cl.Fullname())); fprintf(fp, " return gROOT->GetClass(typeid(*(%s*)obj));\n",cl.Fullname()); - fprintf(fp, " }\n\n"); + fprintf(fp, " }\n"); } fprintf(fp,"}\n\n"); - } //______________________________________________________________________________ @@ -1494,7 +1499,6 @@ const char *GrabIndex(G__DataMemberInfo &member, int printError) return index; } - //______________________________________________________________________________ void WriteStreamer(G__ClassInfo &cl) { @@ -1861,135 +1865,136 @@ void WritePointersSTL(G__ClassInfo &cl) } if (!IsStreamable(m)) continue; - fprintf(fp, "//_______________________________________"); - fprintf(fp, "_______________________________________\n"); - if (pCounter) { - fprintf(fp, "void R__%s_%s(TBuffer &R__b, void *R__p, int R__n)\n",clName,m.Name()); + + fprintf(fp, "//_______________________________________"); + fprintf(fp, "_______________________________________\n"); + if (pCounter) { + fprintf(fp, "void R__%s_%s(TBuffer &R__b, void *R__p, int R__n)\n",clName,m.Name()); + } else { + fprintf(fp, "void R__%s_%s(TBuffer &R__b, void *R__p, int)\n",clName,m.Name()); + } + fprintf(fp, "{\n"); + if (m.Property() & G__BIT_ISARRAY) { + fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); + } else { + if (m.Property() & G__BIT_ISPOINTER) { + if (pCounter) { + fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); + } else { + fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); + } } else { - fprintf(fp, "void R__%s_%s(TBuffer &R__b, void *R__p, int)\n",clName,m.Name()); + fprintf(fp, " %s &%s = *(%s *)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); } - fprintf(fp, "{\n"); + } + fprintf(fp, " if (R__b.IsReading()) {\n"); + if (m.Type()->IsTmplt() && IsSTLContainer(m)) { + STLContainerStreamer(m,0); + } else { if (m.Property() & G__BIT_ISARRAY) { - fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); - } else { + int len = 1; + for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); + fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); if (m.Property() & G__BIT_ISPOINTER) { - if (pCounter) { - fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); - } else { - fprintf(fp, " %s* %s = (%s*)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); - } + fprintf(fp, " R__b >> %s[R__l];\n",m.Name()); } else { - fprintf(fp, " %s &%s = *(%s *)R__p;\n",m.Type()->Name(),m.Name(),m.Type()->Name()); + fprintf(fp, " %s[R__l].Streamer(R__b);\n",m.Name()); } - } - fprintf(fp, " if (R__b.IsReading()) {\n"); - if (m.Type()->IsTmplt() && IsSTLContainer(m)) { - STLContainerStreamer(m,0); + fprintf(fp, " }\n"); } else { - if (m.Property() & G__BIT_ISARRAY) { - int len = 1; - for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); - fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); - if (m.Property() & G__BIT_ISPOINTER) { - fprintf(fp, " R__b >> %s[R__l];\n",m.Name()); + if (m.Property() & G__BIT_ISPOINTER) { + if (pCounter == 2) { + fprintf(fp, " delete [] *%s;\n",m.Name()); + fprintf(fp, " if (!R__n) return;\n"); + fprintf(fp, " *%s = new %s*[R__n];\n",m.Name(),a); + fprintf(fp, " %s** R__s = *%s;\n",a,m.Name()); + fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); + fprintf(fp, " R__s[R__l] = new %s();\n",a); + fprintf(fp, " R__s[R__l]->Streamer(R__b);\n"); + fprintf(fp, " }\n"); + } else if (pCounter == 1) { + fprintf(fp, " delete [] *%s;\n",m.Name()); + fprintf(fp, " if (!R__n) return;\n"); + fprintf(fp, " *%s = new %s[R__n];\n",m.Name(),a); + fprintf(fp, " %s* R__s = *%s;\n",a,m.Name()); + fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); + fprintf(fp, " R__s[R__l].Streamer(R__b);\n"); + fprintf(fp, " }\n"); } else { - fprintf(fp, " %s[R__l].Streamer(R__b);\n",m.Name()); - } - fprintf(fp, " }\n"); + if (strncmp(m.Title(),"->",2) == 0) + fprintf(fp, " (*%s)->Streamer(R__b);\n",m.Name()); + else + fprintf(fp, " R__b >> *%s;\n",m.Name()); + } } else { - if (m.Property() & G__BIT_ISPOINTER) { - if (pCounter == 2) { - fprintf(fp, " delete [] *%s;\n",m.Name()); - fprintf(fp, " if (!R__n) return;\n"); - fprintf(fp, " *%s = new %s*[R__n];\n",m.Name(),a); - fprintf(fp, " %s** R__s = *%s;\n",a,m.Name()); - fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); - fprintf(fp, " R__s[R__l] = new %s();\n",a); - fprintf(fp, " R__s[R__l]->Streamer(R__b);\n"); - fprintf(fp, " }\n"); - } else if(pCounter == 1) { - fprintf(fp, " delete [] *%s;\n",m.Name()); - fprintf(fp, " if (!R__n) return;\n"); - fprintf(fp, " *%s = new %s[R__n];\n",m.Name(),a); - fprintf(fp, " %s* R__s = *%s;\n",a,m.Name()); - fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); - fprintf(fp, " R__s[R__l].Streamer(R__b);\n"); - fprintf(fp, " }\n"); - } else { - if (strncmp(m.Title(),"->",2) == 0) - fprintf(fp, " (*%s)->Streamer(R__b);\n",m.Name()); - else - fprintf(fp, " R__b >> *%s;\n",m.Name()); - } - } else { - fprintf(fp, " %s.Streamer(R__b);\n",m.Name()); - } + fprintf(fp, " %s.Streamer(R__b);\n",m.Name()); } } - fprintf(fp, " } else {\n"); - if (m.Type()->IsTmplt() && IsSTLContainer(m)) { - STLContainerStreamer(m,1); + } + fprintf(fp, " } else {\n"); + if (m.Type()->IsTmplt() && IsSTLContainer(m)) { + STLContainerStreamer(m,1); + } else { + if (m.Property() & G__BIT_ISARRAY) { + int len = 1; + for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); + fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); + if (m.Property() & G__BIT_ISPOINTER) { + if (m.Type()->IsBase("TObject")) + fprintf(fp, " R__b << (TObject*)%s[R__l];\n",m.Name()); + else + fprintf(fp, " R__b << %s[R__l];\n",m.Name()); + } else { + fprintf(fp, " %s[R__l].Streamer(R__b);\n",m.Name()); + } + fprintf(fp, " }\n"); } else { - if (m.Property() & G__BIT_ISARRAY) { - int len = 1; - for (int dim = 0; dim < m.ArrayDim(); dim++) len *= m.MaxIndex(dim); - fprintf(fp, " for (Int_t R__l = 0; R__l < %d; R__l++) {\n",len); - if (m.Property() & G__BIT_ISPOINTER) { - if (m.Type()->IsBase("TObject")) - fprintf(fp, " R__b << (TObject*)%s[R__l];\n",m.Name()); - else - fprintf(fp, " R__b << %s[R__l];\n",m.Name()); + if (m.Property() & G__BIT_ISPOINTER) { + if (pCounter == 2) { + fprintf(fp, " %s** R__s = *%s;\n",a,m.Name()); + fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); + fprintf(fp, " R__s[R__l]->Streamer(R__b);\n"); + fprintf(fp, " }\n"); + } else if(pCounter == 1) { + fprintf(fp, " %s* R__s = *%s;\n",a,m.Name()); + fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); + fprintf(fp, " R__s[R__l].Streamer(R__b);\n"); + fprintf(fp, " }\n"); } else { - fprintf(fp, " %s[R__l].Streamer(R__b);\n",m.Name()); - } - fprintf(fp, " }\n"); - } else { - if (m.Property() & G__BIT_ISPOINTER) { - if (pCounter == 2) { - fprintf(fp, " %s** R__s = *%s;\n",a,m.Name()); - fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); - fprintf(fp, " R__s[R__l]->Streamer(R__b);\n"); - fprintf(fp, " }\n"); - } else if(pCounter == 1) { - fprintf(fp, " %s* R__s = *%s;\n",a,m.Name()); - fprintf(fp, " for (Int_t R__l = 0; R__l < R__n; R__l++) {\n"); - fprintf(fp, " R__s[R__l].Streamer(R__b);\n"); - fprintf(fp, " }\n"); - } else { - if (strncmp(m.Title(),"->",2) == 0) - fprintf(fp, " (*%s)->Streamer(R__b);\n",m.Name()); - else { - if (m.Type()->IsBase("TObject")) - fprintf(fp, " R__b << (TObject*)*%s;\n",m.Name()); - else - fprintf(fp, " R__b << *%s;\n",m.Name()); - } + if (strncmp(m.Title(),"->",2) == 0) + fprintf(fp, " (*%s)->Streamer(R__b);\n",m.Name()); + else { + if (m.Type()->IsBase("TObject")) + fprintf(fp, " R__b << (TObject*)*%s;\n",m.Name()); + else + fprintf(fp, " R__b << *%s;\n",m.Name()); } - } else { - fprintf(fp, " %s.Streamer(R__b);\n",m.Name()); } + } else { + fprintf(fp, " %s.Streamer(R__b);\n",m.Name()); } } - fprintf(fp, " }\n"); - fprintf(fp, "}\n\n"); - //} + } + fprintf(fp, " }\n"); + fprintf(fp, "}\n\n"); } } //______________________________________________________________________________ -void WriteBodyShowMembers(G__ClassInfo& cl, bool outside) { - +void WriteBodyShowMembers(G__ClassInfo& cl, bool outside) +{ const char *prefix = ""; + fprintf(fp, " // Inspect the data members of an object of class %s.\n\n", cl.Fullname()); + if (outside) { - fprintf(fp, " typedef %s ShadowClass;\n",GetFullShadowName(cl)); + fprintf(fp, " typedef %s ShadowClass;\n", GetFullShadowName(cl)); fprintf(fp, " ShadowClass *sobj = (ShadowClass*)obj;\n"); - fprintf(fp, " sobj = sobj; // Dummy usage just in case there is no datamember.\n\n"); + fprintf(fp, " if (sobj) { } // Dummy usage just in case there is no datamember.\n\n"); prefix = "sobj->"; } - fprintf(fp, " // Inspect the data members of an object of class %s.\n\n", cl.Fullname()); if (cl.HasMethod("IsA") && !outside) { #ifdef WIN32 // This is to work around a bad msvc C++ bug. @@ -1998,12 +2003,12 @@ void WriteBodyShowMembers(G__ClassInfo& cl, bool outside) { if (strstr(cl.Fullname(),"::")) { // there is a namespace involved, trigger MS VC bug workaround - fprintf(fp, " typedef %s msvc_bug_workaround;\n", cl.Fullname()); - fprintf(fp, " TClass *R__cl = msvc_bug_workaround::IsA();\n"); + fprintf(fp, " typedef %s msvc_bug_workaround;\n", cl.Fullname()); + fprintf(fp, " TClass *R__cl = msvc_bug_workaround::IsA();\n"); } else - fprintf(fp, " TClass *R__cl = %s::IsA();\n", cl.Fullname()); + fprintf(fp, " TClass *R__cl = %s::IsA();\n", cl.Fullname()); #else - fprintf(fp, " TClass *R__cl = %s::IsA();\n", cl.Fullname()); + fprintf(fp, " TClass *R__cl = %s::IsA();\n", cl.Fullname()); #endif } else { fprintf(fp, " TClass *R__cl = ROOT::GenerateInitInstance((const %s*)0x0)->GetClass();\n", cl.Fullname()); @@ -2167,7 +2172,6 @@ void WriteBodyShowMembers(G__ClassInfo& cl, bool outside) { //______________________________________________________________________________ void WriteShowMembers(G__ClassInfo &cl, bool outside = false) { - fprintf(fp, "//_______________________________________"); fprintf(fp, "_______________________________________\n"); @@ -2188,7 +2192,7 @@ void WriteShowMembers(G__ClassInfo &cl, bool outside = false) // fprintf(fp, "#endif\n"); // if (outside || cl.IsTmplt()) { - WriteBodyShowMembers(cl, outside || cl.IsTmplt() ); + WriteBodyShowMembers(cl, outside || cl.IsTmplt()); fprintf(fp, " }\n\n"); // } else { // fprintf(fp, " typedef %s Class;\n",cl.Fullname()); @@ -2223,8 +2227,8 @@ void WriteShowMembers(G__ClassInfo &cl, bool outside = false) } //______________________________________________________________________________ -void WriteClassCode(G__ClassInfo &cl) { - +void WriteClassCode(G__ClassInfo &cl) +{ if ((cl.Property() & G__BIT_ISCLASS) && cl.Linkage() == G__CPPLINK) { if (cl.HasMethod("Streamer")) { @@ -2248,12 +2252,12 @@ void WriteClassCode(G__ClassInfo &cl) { } else { if (NeedShadowClass(cl)) WriteShowMembers(cl,true); } - } } //______________________________________________________________________________ -int WriteNamespaceHeader(G__ClassInfo &cl) { +int WriteNamespaceHeader(G__ClassInfo &cl) +{ // Write all the necessary opening part of the namespace and // return the number of closing brackets needed // For example for Space1::Space2 @@ -2274,8 +2278,8 @@ int WriteNamespaceHeader(G__ClassInfo &cl) { } //______________________________________________________________________________ -void GetFullyQualifiedName(G__ClassInfo &cl, string &fullyQualifiedName) { - +void GetFullyQualifiedName(G__ClassInfo &cl, string &fullyQualifiedName) +{ string subQualifiedName = ""; fullyQualifiedName = "::"; @@ -2292,46 +2296,50 @@ void GetFullyQualifiedName(G__ClassInfo &cl, string &fullyQualifiedName) { next = &(name[0]); for (int c = 0; c<len; c++) { switch (name[c]) { - case '<': if (nesting==0) { - name[c] = 0; - current = next; - next = &(name[c+1]); - fullyQualifiedName += current; - fullyQualifiedName += "< "; - //fprintf(stderr,"will copy1: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); - } - nesting++; break; - case '>': nesting--; - if (nesting==0) { - name[c] = 0; - current = next; - next = &(name[c+1]); - arg.Init(current); - if (arg.IsValid()) { - GetFullyQualifiedName(arg,subQualifiedName); - fullyQualifiedName += subQualifiedName; - } else { - fullyQualifiedName += current; - } - fullyQualifiedName += " >"; - //fprintf(stderr,"will copy2: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); - } - break; - case ',': if (nesting==1) { - name[c] = 0; - current = next; - next = &(name[c+1]); - arg.Init(current); - if (arg.IsValid()) { - GetFullyQualifiedName(arg,subQualifiedName); - fullyQualifiedName += subQualifiedName; - } else { - fullyQualifiedName += current; - } - fullyQualifiedName += ", "; - //fprintf(stderr,"will copy3: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); - }; - break; + case '<': + if (nesting==0) { + name[c] = 0; + current = next; + next = &(name[c+1]); + fullyQualifiedName += current; + fullyQualifiedName += "< "; + //fprintf(stderr,"will copy1: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); + } + nesting++; + break; + case '>': + nesting--; + if (nesting==0) { + name[c] = 0; + current = next; + next = &(name[c+1]); + arg.Init(current); + if (arg.IsValid()) { + GetFullyQualifiedName(arg,subQualifiedName); + fullyQualifiedName += subQualifiedName; + } else { + fullyQualifiedName += current; + } + fullyQualifiedName += " >"; + //fprintf(stderr,"will copy2: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); + } + break; + case ',': + if (nesting==1) { + name[c] = 0; + current = next; + next = &(name[c+1]); + arg.Init(current); + if (arg.IsValid()) { + GetFullyQualifiedName(arg,subQualifiedName); + fullyQualifiedName += subQualifiedName; + } else { + fullyQualifiedName += current; + } + fullyQualifiedName += ", "; + //fprintf(stderr,"will copy3: %s ...accu: %s\n",current,fullyQualifiedName.c_str()); + } + break; } } if (current == &(name[0]) ) { @@ -2340,113 +2348,114 @@ void GetFullyQualifiedName(G__ClassInfo &cl, string &fullyQualifiedName) { //fprintf(stderr,"Calculated: %s\n",fullyQualifiedName.c_str()); } - //______________________________________________________________________________ -void WriteShadowClass(G__ClassInfo &cl) { - // This function writes or make available a class named ROOT::Shadow::ClassName - // for which all data member are the same as the one in the class but are - // all public +void WriteShadowClass(G__ClassInfo &cl) +{ + // This function writes or make available a class named ROOT::Shadow::ClassName + // for which all data member are the same as the one in the class but are + // all public. - if (!NeedShadowClass(cl)) return; + if (!NeedShadowClass(cl)) return; - // Here we copy the shadow only if the class does not have a ClassDef - // in it. - string classname = ""; - AddShadowClassName(classname, cl); - int closing_brackets = WriteNamespaceHeader(cl); - if (closing_brackets) fprintf(fp,"\n"); - if (cl.HasMethod("Class_Name")) { + // Here we copy the shadow only if the class does not have a ClassDef + // in it. + string classname = ""; + AddShadowClassName(classname, cl); + int closing_brackets = WriteNamespaceHeader(cl); + if (closing_brackets) fprintf(fp,"\n"); + if (cl.HasMethod("Class_Name")) { - string fullname; - GetFullyQualifiedName(cl,fullname); - fprintf(fp," typedef %s %s;\n",fullname.c_str(),classname.c_str()); + string fullname; + GetFullyQualifiedName(cl,fullname); + fprintf(fp," typedef %s %s;\n",fullname.c_str(),classname.c_str()); } else { - Info( 0, "Class %s: Generating Shadow Class [*** non-instrumented class ***]\n", - cl.Fullname()); - - const char *prefix = ""; - - fprintf(fp," #if !(defined(R__ACCESS_IN_SYMBOL) || defined(R__USE_SHADOW_CLASS))\n"); - string fullname; - GetFullyQualifiedName(cl,fullname); - fprintf(fp," typedef %s %s;\n",fullname.c_str(),classname.c_str()); - fprintf(fp," #else\n"); + Info(0, "Class %s: Generating Shadow Class [*** non-instrumented class ***]\n", + cl.Fullname()); - fprintf(fp," class %s ",classname.c_str()); + const char *prefix = ""; + fprintf(fp," #if !(defined(R__ACCESS_IN_SYMBOL) || defined(R__USE_SHADOW_CLASS))\n"); + string fullname; + GetFullyQualifiedName(cl,fullname); + fprintf(fp," typedef %s %s;\n",fullname.c_str(),classname.c_str()); + fprintf(fp," #else\n"); - // Write ShowMembers for base class(es) when they have the ShowMember() method - G__BaseClassInfo b(cl); - bool first = true; - while (b.Next()) { - if (first) { - fprintf(fp, " : "); - first = false; - } else { - fprintf(fp, ", "); - } - if (b.Property() & G__BIT_ISPRIVATE) - fprintf(fp, " private "); - else if (b.Property() & G__BIT_ISPROTECTED) - fprintf(fp, " protected "); - else if (b.Property() & G__BIT_ISPUBLIC) - fprintf(fp, " public "); - else fprintf(fp, " UNKNOWN inheritance "); - fprintf(fp, "%s", b.Fullname()); - } - fprintf(fp, " {\n"); - fprintf(fp, " public:\n"); - fprintf(fp, " //friend XX;\n"); - - // Figure out if there are virtual function and write a dummy one if needed - G__MethodInfo methods(cl); - while (methods.Next()) { - // fprintf(stderr,"%s::%s has property 0x%x\n",cl.Fullname(),methods.Name(),methods.Property()); - if (methods.Property()& - (G__BIT_ISVIRTUALBASE|G__BIT_ISVIRTUAL|G__BIT_ISPUREVIRTUAL) ) { - fprintf(fp," // To force the creation of a virtual table.\n"); - fprintf(fp," virtual ~%s() {};\n",classname.c_str()); - break; - } - } + fprintf(fp," class %s ",classname.c_str()); - // Write data members - G__DataMemberInfo d(cl); - while (d.Next()) { + // Write ShowMembers for base class(es) when they have the ShowMember() method + G__BaseClassInfo b(cl); + bool first = true; + while (b.Next()) { + if (first) { + fprintf(fp, " : "); + first = false; + } else { + fprintf(fp, ", "); + } + if (b.Property() & G__BIT_ISPRIVATE) + fprintf(fp, " private "); + else if (b.Property() & G__BIT_ISPROTECTED) + fprintf(fp, " protected "); + else if (b.Property() & G__BIT_ISPUBLIC) + fprintf(fp, " public "); + else + fprintf(fp, " UNKNOWN inheritance "); + fprintf(fp, "%s", b.Fullname()); + } + fprintf(fp, " {\n"); + fprintf(fp, " public:\n"); + fprintf(fp, " //friend XX;\n"); + + // Figure out if there are virtual function and write a dummy one if needed + G__MethodInfo methods(cl); + while (methods.Next()) { + // fprintf(stderr,"%s::%s has property 0x%x\n",cl.Fullname(),methods.Name(),methods.Property()); + if (methods.Property() & + (G__BIT_ISVIRTUALBASE|G__BIT_ISVIRTUAL|G__BIT_ISPUREVIRTUAL)) { + fprintf(fp," // To force the creation of a virtual table.\n"); + fprintf(fp," virtual ~%s() {};\n",classname.c_str()); + break; + } + } - //fprintf(stderr,"%s %s %d\n",d.Type()->Name(),d.Name(),d.Property()); + // Write data members + G__DataMemberInfo d(cl); + while (d.Next()) { - if (d.Property() & G__BIT_ISSTATIC) continue; - if (strcmp("G__virtualinfo",d.Name())==0) continue; + //fprintf(stderr,"%s %s %d\n",d.Type()->Name(),d.Name(),d.Property()); - string type_name = d.Type()->Name(); + if (d.Property() & G__BIT_ISSTATIC) continue; + if (strcmp("G__virtualinfo",d.Name())==0) continue; - // Remove the eventual ThisClass:: part in the data member class name. - int where = type_name.find(cl.Fullname()); - // if (where==0) type_name.erase(where,strlen(cl.Fullname())+2); - if (where==0) prefix="::"; - else prefix = ""; + string type_name = d.Type()->Name(); - fprintf(fp," %s%s %s",prefix, type_name.c_str(),d.Name()); + // Remove the eventual ThisClass:: part in the data member class name. + int where = type_name.find(cl.Fullname()); + // if (where==0) type_name.erase(where,strlen(cl.Fullname())+2); + if (where==0) + prefix="::"; + else + prefix = ""; - for(int dim = 0; dim < d.ArrayDim(); dim++) { - fprintf(fp, "[%d]",d.MaxIndex(dim)); - } - fprintf(fp, "; //%s\n",d.Title()); + fprintf(fp," %s%s %s",prefix, type_name.c_str(),d.Name()); - } + for(int dim = 0; dim < d.ArrayDim(); dim++) { + fprintf(fp, "[%d]",d.MaxIndex(dim)); + } + fprintf(fp, "; //%s\n",d.Title()); + } - fprintf(fp," };\n"); + fprintf(fp," };\n"); - fprintf(fp," #endif\n"); - } - if (closing_brackets) fprintf(fp," "); - for(int brack=0; brack<closing_brackets; brack++) { - fprintf(fp,"} "); - }; - fprintf(fp,"\n"); + fprintf(fp," #endif\n"); + } + if (closing_brackets) fprintf(fp," "); + for(int brack=0; brack<closing_brackets; brack++) { + fprintf(fp,"} "); + } + fprintf(fp,"\n"); }; //______________________________________________________________________________ @@ -2734,7 +2743,7 @@ int main(int argc, char **argv) } char dictname[256]; - int i, ic, ifl, force; + int i, j, ic, ifl, force; int icc = 0; int use_preprocessor = 0; @@ -2759,7 +2768,7 @@ int main(int argc, char **argv) } else if (!strcmp(argv[ic], "-v4")) { gErrorIgnoreLevel = kInfo; // Display all information (same as -v) ic++; - } + } if (!strcmp(argv[ic], "-f")) { force = 1; @@ -2773,7 +2782,7 @@ int main(int argc, char **argv) fprintf(stderr,"Only one verbose flag is authorized (one of -v, -v0, -v1, -v2, -v3, -v4)\n" "and must be bofore the -f flags\n"); fprintf(stderr,"For more extensive help type: %s -h\n", argv[0]); - return 1; + return 1; } else { force = 0; } @@ -2813,30 +2822,33 @@ int main(int argc, char **argv) #ifndef __CINT__ int argcc, iv, il; - char path1[128], path2[128]; + char path[16][128]; char *argvv[500]; - path1[0] = path2[0] = 0; + for (i = 0; i < 16; i++) + path[i][0] = 0; #ifndef ROOTINCDIR # ifndef ROOTBUILD if (getenv("ROOTSYS")) { # ifdef __MWERKS__ - sprintf(path1,"-I%s:include", getenv("ROOTSYS")); - sprintf(path2,"-I%s:src", getenv("ROOTSYS")); + sprintf(path[0], "-I%s:include", getenv("ROOTSYS")); + sprintf(path[1], "-I%s:src", getenv("ROOTSYS")); # else - sprintf(path1,"-I%s/include", getenv("ROOTSYS")); - sprintf(path2,"-I%s/src", getenv("ROOTSYS")); + sprintf(path[0], "-I%s/include", getenv("ROOTSYS")); + sprintf(path[1], "-I%s/src", getenv("ROOTSYS")); # endif } else { - Error(0, "%s: env var ROOTSYS not defined\n", argv[0]); + Error(0, "%s: environment variable ROOTSYS not defined\n", argv[0]); return 1; } # else - sprintf(path1,"-Iinclude"); + sprintf(path[0], "-Ibase/inc"); + sprintf(path[1], "-Icont/inc"); + sprintf(path[2], "-Iinclude"); # endif #else - sprintf(path1,"-I%s", ROOTINCDIR); + sprintf(path[0], "-I%s", ROOTINCDIR); #endif argvv[0] = argv[0]; @@ -2860,9 +2872,9 @@ int main(int argc, char **argv) argvv[argcc++] = argv[ic++]; } - argvv[argcc++] = path1; - if (strlen(path2)) - argvv[argcc++] = path2; + for (i = 0; path[i][0]; i++) + argvv[argcc++] = path[i]; + #ifdef __hpux argvv[argcc++] = "-I/usr/include/X11R5"; #endif @@ -2871,7 +2883,7 @@ int main(int argc, char **argv) case kNote: argvv[argcc++] = "-J3"; break; case kWarning: argvv[argcc++] = "-J2"; break; case kError: argvv[argcc++] = "-J1"; break; - case kSysError: + case kSysError: case kFatal: argvv[argcc++] = "-J0"; break; default: argvv[argcc++] = "-J1"; break; } @@ -2884,8 +2896,13 @@ int main(int argc, char **argv) argvv[argcc++] = "-V"; // include info on private members argvv[argcc++] = "-c-1"; argvv[argcc++] = "+V"; // turn on class comment mode +#ifdef ROOTBUILD + argvv[argcc++] = "base/inc/TROOT.h"; + argvv[argcc++] = "base/inc/TMemberInspector.h"; +#else argvv[argcc++] = "TROOT.h"; argvv[argcc++] = "TMemberInspector.h"; +#endif } else { Error(0, "%s: option -c can only be used when an output file has been specified\n", argv[0]); return 1; @@ -2917,8 +2934,8 @@ int main(int argc, char **argv) for (i = ic; i < argc; i++) { if (!iv && *argv[i] != '-' && *argv[i] != '+') { if (!icc) { - argvv[argcc++] = path1; - argvv[argcc++] = path2; + for (j = 0; path[j][0]; j++) + argvv[argcc++] = path[j]; argvv[argcc++] = "+V"; } iv = i; -- GitLab