114 class TMmallocDescTemp {
118 TMmallocDescTemp(
void *
value = 0) : fSave(gMmallocDesc) { gMmallocDesc =
value; }
119 ~TMmallocDescTemp() { gMmallocDesc = fSave; }
144 auto strLen = strlen(name);
145 if (strLen == 0)
return;
147 const char* endCharPtr = strchr(name,
'<');
148 endCharPtr = !endCharPtr ? &name[strLen] : endCharPtr;
150 const char* beginCharPtr = endCharPtr;
151 while (beginCharPtr!=name){
152 if (*beginCharPtr==
':'){
158 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
159 std::string s(beginCharPtr, endCharPtr);
161 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n", s.c_str(),
name);
163 fClassNamesSet.insert(s);
173 found = fClassNamesSet.find(name) != fClassNamesSet.end();
183 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",fClassNamesSet.size());
184 for(
auto const & key:fClassNamesSet){
185 printf(
" - %s\n",key.c_str());
196 while (
fAFlag.test_and_set(std::memory_order_acquire));
203 fAFlag.clear(std::memory_order_release);
232 struct ObjRepoValue {
254 gObjectVersionRepository.insert(RepoCont_t::value_type(location, RepoCont_t::mapped_type(what,version)));
258 std::pair<RepoCont_t::iterator, Bool_t> tmp = gObjectVersionRepository.insert(RepoCont_t::value_type>(location, RepoCont_t::mapped_type(what,version)));
260 Warning(where,
"Reregistering an object of class '%s' version %d at address %p", what->
GetName(), version, p);
261 gObjectVersionRepository.erase(tmp.first);
262 tmp = gObjectVersionRepository.insert(RepoCont_t::value_type>(location, RepoCont_t::mapped_type(what,version)));
264 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p", what->
GetName(), version, location);
275 RepoCont_t::iterator cur = gObjectVersionRepository.find(location);
276 for (; cur != gObjectVersionRepository.end();) {
277 RepoCont_t::iterator tmp = cur++;
278 if ((tmp->first == location) && (tmp->second.fVersion == what->
GetClassVersion())) {
281 gObjectVersionRepository.erase(tmp);
294 size_t objsize = what->
Size();
295 long delta = (
char*)newadd - (
char*)oldadd;
297 RepoCont_t::iterator cur = gObjectVersionRepository.find(oldadd);
298 for (; cur != gObjectVersionRepository.end();) {
299 RepoCont_t::iterator tmp = cur++;
300 if (oldadd <= tmp->first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
303 gObjectVersionRepository.insert(RepoCont_t::value_type(((
char*)tmp->first)+delta, RepoCont_t::mapped_type(tmp->second.fClass,tmp->second.fVersion)));
304 gObjectVersionRepository.erase(tmp);
316 #define R__USE_STD_MAP
317 class TMapTypeToTClass {
318 #if defined R__USE_STD_MAP
323 typedef map<string,TClass*>
IdMap_t;
325 typedef std::map<std::string,TClass*>
IdMap_t;
327 typedef IdMap_t::key_type key_type;
328 typedef IdMap_t::const_iterator const_iterator;
329 typedef IdMap_t::size_type size_type;
332 typedef TClass* mapped_type;
334 typedef IdMap_t::mapped_type mapped_type;
341 void Add(
const key_type &key, mapped_type &obj)
346 mapped_type
Find(
const key_type &key)
const
349 IdMap_t::const_iterator
iter = fMap.find(key);
351 if (iter != fMap.end()) cl = iter->second;
354 void Remove(
const key_type &key) {
363 #ifdef R__COMPLETE_MEM_TERMINATION
372 void Add(
const char *key,
TClass *&obj) {
374 fMap.
Add(realkey, obj);
381 void Remove(
const char *key) {
389 class TMapDeclIdToTClass {
392 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
393 typedef DeclIdMap_t::key_type key_type;
394 typedef DeclIdMap_t::mapped_type mapped_type;
395 typedef DeclIdMap_t::const_iterator const_iterator;
396 typedef std::pair <const_iterator, const_iterator> equal_range;
397 typedef DeclIdMap_t::size_type size_type;
403 void Add(
const key_type &key, mapped_type obj)
406 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
409 size_type CountElementsWithKey(
const key_type &key)
411 return fMap.count(key);
413 equal_range
Find(
const key_type &key)
const
416 return fMap.equal_range(key);
418 void Remove(
const key_type &key) {
427 #ifdef R__COMPLETE_MEM_TERMINATION
438 #ifdef R__COMPLETE_MEM_TERMINATION
439 static DeclIdMap_t gDeclIdMapObject;
455 gROOT->GetListOfClasses()->Add(cl);
469 if (!cl || !
id)
return;
481 gROOT->GetListOfClasses()->Remove(oldcl);
513 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
516 void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
532 const Int_t kvalue = 30;
534 const Int_t ktitle = 50;
536 const Int_t ktitle = 42;
538 const Int_t kline = 1024;
546 const char *memberName;
547 const char *memberFullTypeName;
548 const char *memberTitle;
553 if (member->GetDataType()) {
554 memberDataType = (
EDataType)member->GetDataType()->GetType();
556 memberName = member->GetName();
557 memberFullTypeName = member->GetFullTypeName();
558 memberTitle = member->GetTitle();
559 isapointer = member->IsaPointer();
560 isbasic = member->IsBasic();
567 const char *cursor = mname;
568 while ( (*cursor)==
'*' ) ++cursor;
570 Ssiz_t pos = elname.Index(
"[");
571 if ( pos !=
kNPOS ) {
572 elname.Remove( pos );
575 if (!element)
return;
580 memberName = element->
GetName();
583 membertype =
gROOT->GetType(memberFullTypeName);
585 isbasic = membertype !=0;
592 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
596 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
601 static TClassRef stdClass(
"std::string");
602 Bool_t isStdString = (dataClass == stdClass);
605 for (i = 0;i < kline; i++) line[i] =
' ';
607 snprintf(line,kline,
"%s%s ",pname,mname);
608 i = strlen(line); line[i] =
' ';
611 char *pointer = (
char*)add;
612 char **ppointer = (
char**)(pointer);
615 char **p3pointer = (
char**)(*ppointer);
617 snprintf(&line[kvalue],kline-kvalue,
"->0");
620 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)p3pointer);
622 }
else if (membertype) {
624 i = strlen(*ppointer);
625 if (kvalue+i > kline) i=kline-1-kvalue;
627 for (
Int_t j = 0; j < i; j++) {
628 if (!std::isprint((*ppointer)[j])) {
634 strncpy(line + kvalue, *ppointer, i);
640 strncpy(&line[kvalue], membertype->
AsString(p3pointer),
TMath::Min(kline-1-kvalue,(
int)strlen(membertype->
AsString(p3pointer))));
642 }
else if (!strcmp(memberFullTypeName,
"char*") ||
643 !strcmp(memberFullTypeName,
"const char*")) {
644 i = strlen(*ppointer);
645 if (kvalue+i >= kline) i=kline-1-kvalue;
647 for (
Int_t j = 0; j < i; j++) {
648 if (!std::isprint((*ppointer)[j])) {
654 strncpy(line + kvalue, *ppointer, i);
661 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)p3pointer);
664 }
else if (membertype) {
666 cdatime = (
UInt_t*)pointer;
668 snprintf(&line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
670 snprintf(&line[kvalue],kline-kvalue,
"0x%08x", *(
UInt_t*)pointer);
676 std::string *str = (std::string*)pointer;
677 snprintf(&line[kvalue],kline-kvalue,
"%s",str->c_str());
678 }
else if (isTString) {
680 snprintf(&line[kvalue],kline-kvalue,
"%s",str->
Data());
683 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)pointer);
688 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
689 i = strlen(&line[0]); line[i] =
' ';
690 Int_t lentit = strlen(memberTitle);
691 if (lentit > 250-ktitle) lentit = 250-ktitle;
692 strncpy(&line[ktitle],memberTitle,lentit);
693 line[ktitle+lentit] = 0;
715 void *fRealDataObject;
719 TBuildRealData(
void *obj,
TClass *cl) {
721 fRealDataObject =
obj;
725 void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
744 isTransientMember =
kTRUE;
751 if (cl != fRealDataClass) {
752 if (!fRealDataClass->InheritsFrom(cl)) {
753 Ssiz_t dot = rname.Index(
'.');
758 if (!fRealDataClass->GetDataMember(rname)) {
773 if (!fRealDataClass->GetBaseDataMember(rname)) {
789 fRealDataClass->GetListOfRealData()->Add(rd);
794 fRealDataClass->GetListOfRealData()->Add(rd);
840 void* addrForRecursion = 0;
841 if (GetObjectValidity() == kValidObjectGiven)
842 addrForRecursion =
const_cast<void*
>(add);
849 fRealDataClass->GetListOfRealData()->Add(rd);
866 fBrowser = b; fCount = 0; }
867 virtual ~TAutoInspector() { }
869 virtual void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
870 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
877 const void *addr,
Bool_t )
879 if(tit && strchr(tit,
'.'))
return ;
880 if (fCount && !fBrowser)
return;
886 if (*name ==
'*') name++;
887 int ln = strcspn(name,
"[ ");
891 if (!classInfo)
return;
901 if ((found = (iname==mname)))
break;
910 if (prop & kIsStatic)
return;
911 if (prop & kIsFundamental)
return;
912 if (prop & kIsEnum)
return;
913 if (mname ==
"G__virtualinfo")
return;
915 int size =
sizeof(
void*);
918 if (prop & kIsArray) {
926 if (!(prop & kIsPointer)) {
935 for(
int i=0; i<nmax; i++) {
937 char *ptr = (
char*)addr + i*size;
944 if (!fBrowser)
return;
952 bwname = actualClass->
GetName();
961 int l = strcspn(bwname.
Data(),
"[ ");
962 if (l<bwname.
Length() && bwname[
l]==
'[') {
963 char cbuf[12]; snprintf(cbuf,12,
"[%02d]",i);
966 bwname = (
const char*)ts;
972 fBrowser->Add(obj,clm,bwname);
979 fBrowser->Add( obj, clm, bwname );
985 int sz = proxy->
Size();
987 char fmt[] = {
"#%09d"};
988 fmt[3] =
'0'+(int)
log10(
double(sz))+1;
990 for (
int ii=0;ii<sz;ii++) {
991 void *p = proxy->
At(ii);
1000 snprintf(buf,20,fmt,ii);
1003 fBrowser->Add( p, actualCl, ts );
1042 TMmallocDescTemp setreset;
1078 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1081 TMmallocDescTemp setreset;
1088 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1092 ::
Warning(
"TClass::TClass",
"no dictionary for class %s is available", name);
1106 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1107 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1108 fAllPubMethod(0), fClassMenuList(0),
1109 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1110 fInstanceCount(0), fOnHeap(0),
1111 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1112 fTypeInfo(0), fShowMembers(0),
1113 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1114 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1115 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1116 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1119 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1120 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1123 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1133 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1134 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1135 fAllPubMethod(0), fClassMenuList(0),
1136 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1137 fInstanceCount(0), fOnHeap(0),
1138 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1139 fTypeInfo(0), fShowMembers(0),
1140 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1141 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1142 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1143 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1146 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1147 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1159 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1160 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1177 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1178 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1179 fAllPubMethod(0), fClassMenuList(0),
1180 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1181 fInstanceCount(0), fOnHeap(0),
1182 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1183 fTypeInfo(0), fShowMembers(0),
1184 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1185 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1186 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1187 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1190 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1191 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1196 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1202 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1204 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1211 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1227 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1228 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1229 fAllPubMethod(0), fClassMenuList(0),
1230 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1231 fInstanceCount(0), fOnHeap(0),
1232 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1233 fTypeInfo(0), fShowMembers(0),
1234 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1235 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1236 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1237 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1240 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1241 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1244 Init(name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1253 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1257 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1258 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1261 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1262 fInstanceCount(0), fOnHeap(0),
1263 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1264 fTypeInfo(0), fShowMembers(0),
1265 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1266 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1267 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1268 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1270 fState(kHasTClassInit),
1271 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1272 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1276 Init(name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1294 info->
Clear(
"build");
1310 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1311 ClassInfo_t *givenInfo,
1315 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1347 TClass **persistentRef = 0;
1365 info->
Clear(
"build");
1384 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1445 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass initialization routine.",
fName.
Data());
1461 if (!givenInfo && strchr (name,
'<')) {
1462 if (
fName != name) {
1473 if (resolvedThis != name) {
1497 if (resolvedThis !=
fName) {
1498 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(resolvedThis);
1499 if (oldcl && oldcl !=
this) {
1506 if (resolvedThis != htmp->String())
continue;
1507 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(htmp->fOrigName);
1508 if (oldcl && oldcl !=
this) {
1526 if (persistentRef) {
1533 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1538 if (fCollectionProxy) {
1544 }
else if (!silent) {
1545 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1551 }
else if (!strncmp(
GetName(),
"std::pair<",10) || !strncmp(
GetName(),
"pair<",5) ) {
1571 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1638 std::map<std::string, TObjArray*>::iterator it;
1639 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1640 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1650 Int_t ReadRulesContent(FILE *f)
1662 while ((c = fgetc(f)) != EOF) {
1668 if (rule.Length() > 0) {
1720 static const char *suffix =
"class.rules";
1736 FILE * f = fopen(sname,
"r");
1738 res = ReadRulesContent(f);
1752 if (!filename || !filename[0]) {
1753 ::Error(
"TClass::ReadRules",
"no file name specified");
1757 FILE * f = fopen(filename,
"r");
1759 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1762 Int_t count = ReadRulesContent(f);
1815 ::Warning(
"TClass::AddRule",
"The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because it conflicts with one of the other rules (%s).",
1876 TAutoInspector insp(b);
1877 obj->ShowMembers(insp);
1898 }
else if (actual !=
this) {
1899 return actual->
Browse(obj, b);
1905 TAutoInspector insp(b);
1948 isTransient =
kTRUE;
1953 TMmallocDescTemp setreset;
1964 static TClassRef clRefString(
"std::string");
1965 if (clRefString ==
this) {
1974 && strncmp(
GetName(),
"pair<", 5) != 0) {
1975 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
1981 TBuildRealData brd(pointer,
this);
1987 if ( isTransient ) {
1995 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2030 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2039 Long_t eoffset = element->GetOffset();
2040 TClass *cle = element->GetClassPointer();
2049 TString rdname; rdname.
Form(
"%s%s",name,element->GetFullName());
2054 rdname.
Form(
"%s%s.",name,element->GetFullName());
2058 TString rdname; rdname.
Form(
"%s%s",name,element->GetFullName());
2072 Int_t etype = element->GetType();
2075 Long_t eoffset = element->GetOffset();
2076 TClass *cle = element->GetClassPointer();
2096 TMmallocDescTemp setreset;
2123 if (strcmp(
GetName(),
"string") == 0) {
2131 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2135 sinfo->CallShowMembers(obj, insp, isTransient);
2150 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2184 TClass *clbase = element->GetClassPointer();
2260 static TClassRef stdStringClass(
"std::string");
2325 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2326 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2356 copy->
fName = new_name;
2372 if (fCollectionProxy && !copy->
IsZombie()) {
2393 fCollectionProxy = orig.
Generate();
2411 if (!padsav || !opt.
Contains(
"same")) {
2414 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2420 if (
gPad)
gPad->DrawClassObject(
this,option);
2422 if (padsav) padsav->
cd();
2463 if (
sizeof(
this) == 4)
2466 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2469 if (
sizeof(
this) == 4)
2470 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2472 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2475 TDumpMembers dm(noAddr);
2477 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2488 static char name[maxsize+2];
2490 UInt_t nch = strlen(text);
2492 for (
UInt_t i = 0; i < nch && icur <
maxsize; ++i, ++icur) {
2493 if (text[i] ==
'\"' || text[i] ==
'[' || text[i] ==
'~' ||
2494 text[i] ==
']' || text[i] ==
'&' || text[i] ==
'#' ||
2495 text[i] ==
'!' || text[i] ==
'^' || text[i] ==
'<' ||
2496 text[i] ==
'?' || text[i] ==
'>') {
2500 name[icur] = text[i];
2526 if (
object==0)
return (
TClass*)
this;
2528 return (*
fIsA)(object);
2539 return realTObject->IsA();
2556 return (*
fIsA)(object);
2574 if (strcmp(
GetName(), classname) == 0)
return this;
2593 if (cl ==
this)
return this;
2605 if (cl == c)
return c;
2624 if (cl ==
this)
return 0;
2626 if (!
fBase.load()) {
2633 if (!sinfo)
return -1;
2639 for(
Int_t i=0; i<size; i++) {
2645 if (!baseclass)
return -1;
2647 if (subOffset == -2)
return -2;
2648 if (subOffset != -1)
return offset+subOffset;
2649 offset += baseclass->
Size();
2653 if (!baseclass)
return -1;
2655 if (subOffset == -2)
return -2;
2656 if (subOffset != -1)
return offset+subOffset;
2657 offset += baseclass->
Size();
2660 Error(
"GetBaseClassOffsetRecurse",
"Unexpected element type for base class: %s\n",element->IsA()->
GetName());
2673 else lnk =
fBase.load()->FirstLink();
2690 if (off == -2)
return -2;
2709 if (
this == toBase)
return 0;
2725 if(derived && base) {
2746 if (dm)
return this;
2755 if (cdm)
return cdm;
2766 struct TClassLocalStorage {
2767 TClassLocalStorage() : fCollectionProxy(0), fStreamer(0) {};
2772 static TClassLocalStorage *GetStorage(
const TClass *cl)
2778 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2785 local = (
ULong_t)
new TClassLocalStorage();
2788 return (TClassLocalStorage*)local;
2816 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2818 if (local->fCollectionProxy==0) local->fCollectionProxy = fCollectionProxy->
Generate();
2819 return local->fCollectionProxy;
2830 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2832 if (local->fStreamer==0) {
2833 local->fStreamer = fStreamer->
Generate();
2834 const type_info &orig = (
typeid(*fStreamer) );
2835 if (!local->fStreamer) {
2836 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2838 const type_info © = (
typeid(*local->fStreamer) );
2839 if (strcmp(orig.name(),copy.name())!=0) {
2840 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2844 return local->fStreamer;
2883 if (!name || !name[0])
return 0;
2885 if (strstr(name,
"(anonymous)"))
return 0;
2886 if (strncmp(name,
"class ",6)==0) name += 6;
2887 if (strncmp(name,
"struct ",7)==0) name += 7;
2891 if (!
gROOT->GetListOfClasses())
return 0;
2926 if (!cl && !load)
return 0;
2928 TClass *loadedcl = (dict)();
2938 std::string normalizedName;
2946 if (normalizedName != name) {
2947 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(normalizedName.c_str());
2958 normalizedName = cl->
GetName();
2959 checkTable = load && (normalizedName !=
name);
2962 if (!load)
return 0;
2988 if (
TDataType* theDataType =
gROOT->GetType(normalizedName.c_str())){
2990 auto underlyingTypeName = theDataType->GetTypeName();
2993 if (underlyingTypeDict){
2994 loadedcl = underlyingTypeDict();
3000 if (loadedcl)
return loadedcl;
3004 if (loadedcl)
return loadedcl;
3017 std::string::size_type posLess = normalizedName.find(
'<');
3018 if (posLess != std::string::npos) {
3025 printf(
"TClass::GetClass: Header Parsing - The representation of %s was not found in the type system. A lookup in the interpreter is about to be tried: this can cause parsing. This can be avoided selecting %s in the linkdef/selection file.\n",normalizedName.c_str(), normalizedName.c_str());
3027 if (normalizedName.length() &&
3031 std::string alternative;
3033 const char *altname = alternative.c_str();
3034 if ( strncmp(altname,
"std::",5)==0 ) {
3039 if (altname != normalizedName && strcmp(altname,name) != 0) {
3067 if (!
gROOT->GetListOfClasses())
return 0;
3088 if (!load)
return 0;
3110 if (!autoload_old) {
3142 if (!
gROOT->GetListOfClasses())
return 0;
3150 if (cl->IsLoaded())
return cl;
3157 if (!load)
return 0;
3160 if (cl) loadedcl =
gROOT->LoadClass(cl->GetName(),silent);
3161 else loadedcl =
gROOT->LoadClass(name,silent);
3163 if (loadedcl)
return loadedcl;
3188 if (!
gROOT->GetListOfClasses())
return 0;
3192 DeclIdMap_t::equal_range
iter = map->Find(
id);
3193 if (iter.first == iter.second)
return false;
3194 std::vector<TClass*>::iterator vectIt = classes.begin();
3195 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3196 vectIt = classes.insert(vectIt, it->second);
3224 || datamember == 0)
return 0;
3227 const char *start_name = datamember;
3228 while (*start_name ==
'*') ++start_name;
3233 if (
const char *s = strchr(start_name,
'[')){
3234 UInt_t len = s-start_name;
3253 if (strchr(name,
'[')==0) {
3295 std::string givenName(name);
3298 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3299 if (firstBracket != std::string::npos) {
3301 std::string nameNoDim(givenName.substr(0, firstBracket));
3304 TObject* obj = lnk->GetObject();
3305 std::string objName(obj->
GetName());
3306 std::string::size_type pos = objName.find_first_of(
"[");
3308 if (pos != std::string::npos) {
3310 if (objName == nameNoDim) {
3319 std::ostringstream ptrname;
3320 ptrname <<
"*" << givenName;
3327 std::string::size_type firstDot = givenName.find_first_of(
".");
3328 if (firstDot == std::string::npos) {
3339 std::string::size_type lastDot = givenName.find_last_of(
".");
3340 std::ostringstream starname;
3341 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3349 std::string firstDotName(givenName.substr(firstDot + 1));
3363 std::string::size_type firstDotBracket = firstDotName.find_first_of(
"[");
3364 if (firstDotBracket != std::string::npos) {
3366 std::string nameNoDim(firstDotName.substr(0, firstDotBracket));
3369 TObject* obj = lnk->GetObject();
3370 std::string objName(obj->
GetName());
3371 std::string::size_type pos = objName.find_first_of(
"[");
3373 if (pos != std::string::npos) {
3375 if (objName == nameNoDim) {
3388 ptrname <<
"*" << firstDotName;
3404 std::string::size_type bracket = starname.str().find_first_of(
"[");
3405 if (bracket == std::string::npos) {
3475 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3490 auto temp =
fEnums.load();
3520 if (load) (*fEnums).Load();
3594 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3627 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3657 while ((baseClass = (
TBaseClass *) nextBase())) {
3696 return cl->IsLoaded();
3724 TIter nextMemb(ldm);
3755 for (
int i = 0; i < 2; i++) {
3771 if (
this == sCIString)
return;
3774 if (strncmp(
fName,
"pair<", 5) == 0) {
3822 if (
this == sCIString)
return;
3826 if (strncmp(
fName,
"pair<", 5) == 0) {
3881 while ((acl = (
TClass*)nextClass())) {
3882 if (acl == newcl)
continue;
3884 TIter nextInfo(acl->GetStreamerInfos());
3887 info->
Update(
this, newcl);
3890 if (acl->GetCollectionProxy()) {
3891 acl->GetCollectionProxy()->UpdateValueClass(
this, newcl);
3896 TIter delIter( &tobedeleted );
3897 while ((acl = (
TClass*)delIter())) {
3910 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
3961 (*fMethod).Unload();
3995 if (options==0 || options[0]==0)
return;
3997 if (strstr(options,
"streamerinfo")!=0) {
4001 std::map<std::string, TObjArray*>::iterator it;
4002 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
4003 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
4004 it->second->ls(options);
4035 if (classPtr != method->
GetClass()) {
4043 TIter nextarg(margsList);
4044 while ((methodArg = (
TMethodArg*)nextarg())) {
4094 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4152 Fatal(
"GetMethod",
"gInterpreter not initialized");
4158 if (!decl)
return 0;
4165 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4166 method,params,objectIsConst ?
"const " :
"",
GetName());
4202 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4206 objectIsConst, mode);
4208 if (!decl)
return 0;
4211 Error(
"GetMethodWithPrototype",
4212 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4213 method,proto,objectIsConst ?
"const " :
"",
GetName());
4247 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4253 if (!decl)
return 0;
4273 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4280 if (!decl)
return 0;
4356 if ((version < -1) || (version >= ninfos)) {
4357 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4373 TMmallocDescTemp setreset;
4425 newname +=
"@@emulated";
4448 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4461 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4485 newname +=
"@@emulated";
4499 if (!sinfo && (checksum !=
fCheckSum)) {
4508 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4521 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4567 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4593 if (cl ==
this)
return kTRUE;
4602 TClass *clbase = element->GetClassPointer();
4603 if (!clbase)
return kFALSE;
4610 if (((
TClass *)
this)->GetBaseClass(cl))
return kTRUE;
4622 if (cl ==
this)
return obj;
4629 return (
void*)((
Long_t)obj+off);
4631 return (
void*)((
Long_t)obj-off);
4697 Error(
"New",
"cannot create object of class %s",
GetName());
4713 Error(
"New",
"cannot create object of class %s",
GetName());
4720 p = fCollectionProxy->
New();
4724 Error(
"New",
"cannot create object of class %s",
GetName());
4745 if (!sinfo && !quiet) {
4764 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
4767 Fatal(
"New",
"This cannot happen!");
4791 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4806 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4813 p = fCollectionProxy->
New(arena);
4834 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
4839 p = sinfo->
New(arena);
4853 Error(
"New with placement",
"This cannot happen!");
4900 p = fCollectionProxy->
NewArray(nElements);
4940 Error(
"NewArray",
"This cannot happen!");
4964 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4979 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4986 p = fCollectionProxy->
NewArray(nElements, arena);
5007 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5012 p = sinfo->
NewArray(nElements, arena);
5031 Error(
"NewArray with placement",
"This cannot happen!");
5043 if (obj == 0)
return;
5050 }
else if ((!dtorOnly) &&
fDelete) {
5082 std::multiset<Version_t> knownVersions;
5086 RepoCont_t::iterator
iter = gObjectVersionRepository.find(p);
5087 if (iter == gObjectVersionRepository.end()) {
5093 for (; (iter != gObjectVersionRepository.end()) && (iter->first == p); ++
iter) {
5095 knownVersions.insert(ver);
5103 if (!inRepo || verFound) {
5110 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5116 Error(
"Destructor",
"Doing Dump() ...");
5131 Error(
"Destructor2",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5138 Error(
"Destructor2",
"Doing Dump() ...");
5146 if (inRepo && verFound && p) {
5150 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5160 if (ary == 0)
return;
5167 Error(
"DeleteArray",
"Destructor only is not supported!");
5196 std::multiset<Version_t> knownVersions;
5199 RepoCont_t::iterator
iter = gObjectVersionRepository.find(p);
5200 if (iter == gObjectVersionRepository.end()) {
5205 for (; (iter != gObjectVersionRepository.end()) && (iter->first == p); ++
iter) {
5207 knownVersions.insert(ver);
5215 if (!inRepo || verFound) {
5222 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5228 Error(
"DeleteArray",
"Doing Dump() ...");
5237 Error(
"DeleteArray",
"Loaded class version %d is not registered for addr %p",
fClassVersion, p);
5246 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5253 Error(
"DeleteArray",
"Doing Dump() ...");
5264 if (inRepo && verFound && p) {
5268 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5328 if (fCollectionProxy)
return fCollectionProxy->
Sizeof();
5344 while (strlen(s) == (maxsize - 1)) {
5355 ::Error(
"TClass::Load",
"dictionary of class %s not found", s);
5379 if (result)
return result;
5463 ::Error(
"TClass::LoadClassInfo",
5464 "no interpreter information for class %s is available even though it has a TClass initialization routine.",
5485 const char *dfil,
const char *ifil,
5490 TMmallocDescTemp setreset;
5491 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5499 const char *dfil,
const char *ifil,
5504 TMmallocDescTemp setreset;
5505 return new TClass(cname,
id, dfil, ifil, dl, il);
5609 The class %s transitioned from not having a specified class version\n\
5610 to having a specified class version (the current class version is %d).\n\
5611 However too many different non-versioned layouts of the class have\n\
5612 already been loaded so far. To work around this problem you can\n\
5613 load fewer 'old' file in the same ROOT session or load the C++ library\n\
5614 describing the class %s before opening the files or increase the version\n\
5615 number of the class for example ClassDef(%s,%d).\n\
5616 Do not try to write objects with the current class definition,\n\
5617 the files might not be readable.\n",
5621 The StreamerInfo version %d for the class %s which was read\n\
5622 from a file previously opened has the same version as the active class\n\
5623 but a different checksum. You should update the version to ClassDef(%s,%d).\n\
5624 Do not try to write objects with the current class definition,\n\
5625 the files will not be readable.\n"
5670 TMmallocDescTemp setreset;
5794 fCollectionProxy = p;
5858 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
5883 (*fMethod).Unload();
5892 if (fState <= kForwardDeclared && fStreamerInfo->GetEntries() != 0) {
5985 //info is empty. Let's build the default Streamer descriptor
5987 char *temp = new char[10000];
5991 //add list of base classes
5992 TIter nextb(GetListOfBases());
5994 while ((base = (TBaseClass*) nextb())) {
5995 snprintf(local,100,"%s;",base->GetName());
5996 strlcat(temp,local,10000);
5999 //add list of data members and types
6000 TIter nextd(GetListOfDataMembers());
6001 while ((dm = (TDataMember *) nextd())) {
6002 if (dm->IsEnum()) continue;
6003 if (!dm->IsPersistent()) continue;
6004 Long_t property = dm->Property();
6005 if (property & kIsStatic) continue;
6006 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
6009 if (acl->GetClassVersion() == 0) continue;
6012 // dm->GetArrayIndex() returns an empty string if it does not
6014 const char * index = dm->GetArrayIndex();
6015 if (strlen(index)==0)
6016 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
6018 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
6019 strlcat(temp,local,10000);
6021 //fStreamerInfo = temp;
6110 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6115 TIter nextBase(tlb);
6124 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6127 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6136 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6138 TIter nextMemb(tlm);
6148 if ( prop&kIsStatic)
continue;
6154 for (i=0; i<il; i++)
id =
id*3+name[i];
6166 type.
ReplaceAll(
"ULong64_t",
"unsigned long long");
6170 if (type==
"signed char") type =
"char";
6182 for (i=0; i<il; i++)
id =
id*3+type[i];
6185 if (prop&kIsArray) {
6186 for (
int ii=0;ii<dim;ii++)
id =
id*3+tdm->
GetMaxIndex(ii);
6193 left = strstr(tdm->
GetTitle(),
"[");
6195 const char *right = strstr(left,
"]");
6198 while (left != right) {
6324 streamer->
Stream(b,
object,onfile_class);
6414 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
6437 }
else if (fStreamer) {
6576 for (
Int_t i=-1;i<ninfos;++i) {
6598 for (
Int_t i=-1;i<ninfos;i++) {
6602 if (!info)
continue;
6643 std::map<std::string, TObjArray*>::iterator it;
6646 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6648 if( it != (*fConversionStreamerInfo).end() ) {
6652 if( arr && version > -1 && version < arr->GetSize() && arr->
At( version ) )
6664 if( version >= -1 && version < clSI->GetSize() )
6702 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6741 std::map<std::string, TObjArray*>::iterator it;
6745 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6747 if( it != (*fConversionStreamerInfo).end() ) {
6796 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6815 Error(
"RegisterStreamerInfo",
6816 "Register StreamerInfo for %s on non-empty slot (%d).",
6856 if (fCollectionProxy) {
TObject * Clone(const char *newname="") const
Create a Clone of this TClass object using a different name but using the same 'dictionary'.
virtual TObject * FindObject(const TObject *obj) const
Find object using its hash value (returned by its Hash() member).
void ReplaceWith(TClass *newcl) const
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
void AddQualifiedName(const char *name)
Extract this part of the name.
void ResetCaches()
To clean out all caches.
virtual void SetClass(TClass *cl)=0
virtual const char * GetTitle() const
Returns title of object.
virtual void * New(void *obj=0)=0
Int_t GetNdata()
Return the number of data members of this class Note that in case the list of data members is not yet...
void SetBufferOffset(Int_t offset=0)
virtual Int_t GetCollectionType() const =0
TList * GetMenuList() const
Return the list of menu items associated with the class.
Bool_t AddRule(TSchemaRule *rule, EConsistencyCheck checkConsistency=kCheckAll, TString *errmsg=0)
The consistency check always fails if the TClass object was not set! if checkConsistency is: kNoCheck...
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
ShowMembersFunc_t fShowMembers
virtual TClassStreamer * GenEmulatedClassStreamer(const char *class_name, Bool_t silent)=0
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
virtual void SetClass(TClass *cl)=0
Bool_t HasDefaultConstructor() const
Return true if we have access to a default constructor.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
void SetIsObject(Bool_t isObject)
static TDataType * GetDataType(EDataType type)
Given a EDataType type, get the TDataType* that represents it.
ROOT::NewArrFunc_t fNewArray
virtual Int_t GetProperties() const
ROOT::MergeFunc_t GetMerge() const
Return the wrapper around Merge.
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
void(* ClassStreamerFunc_t)(TBuffer &, void *)
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
std::atomic< TMethodCall * > fIsAMethod
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TString GetTypeName()
Get basic type of typedef, e,g.
const char * GetVersion() const
Get the version string.
void Add(THist< DIMENSION, PRECISIONA > &to, THist< DIMENSION, PRECISIONB > &from)
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector,allocator> result: 0 : not stl container code of cont...
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
virtual int DataMemberInfo_TypeSize(DataMemberInfo_t *) const
ROOT::DelArrFunc_t GetDeleteArray() const
Return the wrapper around delete [] ThiObject.
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse)
Verify the base classes always.
const char * GetTypeName() const
Namespace for new ROOT classes and functions.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual Bool_t CompareContent(TClass *cl, TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete, TFile *file)=0
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
virtual void ClassInfo_Delete(ClassInfo_t *) const
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
Int_t GetNmethods()
Return the number of methods of this class Note that in case the list of methods is not yet created...
virtual TClass * GetClass() const =0
const TList * GetListForObject(const char *name) const
Return the TList corresponding to object's name based hash value.
Collectable string class.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
static void AddClassToDeclIdMap(TDictionary::DeclId_t id, TClass *cl)
static: Add a TClass* to the map of classes.
virtual TVirtualCollectionProxy * GenExplicitProxy(const ::ROOT::Detail::TCollectionProxyInfo &info, TClass *cl)=0
R__EXTERN TClassTable * gClassTable
Int_t GetLast() const
Return index of last object in array.
ConvSIMap_t fConversionStreamerInfo
TDictionary::DeclId_t DeclId_t
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t *) const
ROOT::DesFunc_t GetDestructor() const
Return the wrapper around the destructor.
Dictionary for function template This class describes one single function template.
virtual TClass * GetValueClass() const =0
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
All ROOT classes may have RTTI (run time type identification) support added.
static TProtoClass * GetProtoNorm(const char *cname)
Given the class normalized name returns the TClassProto object for the class.
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
void ls(Option_t *opt="") const
The ls function lists the contents of a class on stdout.
TList * GetListOfEnums(Bool_t load=kTRUE)
Return list containing the TEnums of a class.
TString & ReplaceAll(const TString &s1, const TString &s2)
std::atomic< TListOfEnums * > fEnums
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
void BuildEmulatedRealData(const char *name, Long_t offset, TClass *cl)
Build the list of real data for an emulated class.
void SetClassVersion(Version_t version)
Private function.
Int_t GetNargs() const
Number of function arguments.
TViewPubFunctions * fAllPubMethod
virtual void SetName(const char *name)
Change (i.e.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
Persistent version of a TClass.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
void ResetMenuList()
Resets the menu list to it's standard value.
std::atomic< Bool_t > fHasRootPcmInfo
C++ Property of the class (is abstract, has virtual table, etc.)
virtual const char * ClassInfo_Title(ClassInfo_t *) const
static THashTable * fgClassTypedefHash
void * InterfaceMethod() const
Return pointer to the interface method.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual void DataMemberInfo_Delete(DataMemberInfo_t *) const
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
TMethod * GetClassMethodWithPrototype(const char *name, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
virtual void AddFirst(TObject *obj)
Add object at the beginning of the list.
ROOT::DirAutoAdd_t fDirAutoAdd
static void RemoveClassDeclId(TDictionary::DeclId_t id)
virtual void * ClassInfo_New(ClassInfo_t *) const
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
Buffer base class used for serializing objects.
static void SetObjectStat(Bool_t stat)
Turn on/off tracking of objects in the TObjectTable.
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
virtual int SetClassAutoloading(int) const
This class implements a mutex interface.
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
virtual TObject * FindObject(const char *name) const
Specialize FindObject to do search for the a function just by name or create it if its not already in...
static const char * filename()
Bool_t IsPersistent() const
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
virtual TVirtualStreamerInfo * NewInfo(TClass *cl)=0
virtual TClassStreamer * Generate() const
virtual Bool_t ClassInfo_HasMethod(ClassInfo_t *, const char *) const
virtual void Browse(TBrowser *b)
Browse object. May be overridden for another default action.
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method). ...
TString fContextMenuTitle
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Short_t Min(Short_t a, Short_t b)
ROOT::NewFunc_t GetNew() const
Return the wrapper around new ThisClass().
TDataType * GetDataType() const
Bool_t IsaPointer() const
Return true if data member is a pointer.
R__EXTERN TVirtualMutex * gROOTMutex
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
virtual void ClassInfo_Destruct(ClassInfo_t *, void *) const
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
Each ROOT method (see TMethod) has a linked list of its arguments.
virtual Int_t GetSize() const =0
static void StreamerTObjectInitialized(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when fIsOffsetStreamerSet is known to have been set.
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' into this collection...
static const char * GetElementCounterStart(const char *dmTitle)
Given a comment/title declaring an array counter, for example: //[fArraySize] array of size fArraySiz...
TVirtualStreamerInfo * FindStreamerInfoAbstractEmulated(UInt_t checksum) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
Int_t fStreamerType
saved info to call Streamer
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
bool IsSTLBitset(const char *type)
Return true is the name is std::bitset or bitset
TFunction * Get(DeclId_t id)
Return (after creating it if necessary) the TMethod or TFunction describing the function correspondin...
Int_t GetEntriesFast() const
virtual void Stream(TBuffer &b, void *objp, const TClass *onfileClass)
Abstract base class for accessing the data-members of a class.
static void MoveAddressInRepository(const char *, void *oldadd, void *newadd, const TClass *what)
static void StreamerStreamerInfo(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of where we should directly use the StreamerInfo.
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Int_t GetMaxIndex(Int_t dim) const
Return maximum index for array dimension "dim".
virtual void Clear(Option_t *)=0
Set name and title to empty strings ("").
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
void SetClassSize(Int_t sizof)
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
void LoadClassInfo() const
Try to load the classInfo (it may require parsing the header file and/or loading data from the clang ...
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
virtual void AddLast(TObject *obj)
Add object at the end of the list.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
TList * GetListOfRealData() const
void ResetInstanceCount()
Int_t ReadBuffer(TBuffer &b, void *pointer, Int_t version, UInt_t start, UInt_t count)
Function called by the Streamer functions to deserialize information from buffer b into object at p...
const char * Data() const
static IdMap_t * GetIdMap()
static void StreamerTObjectEmulated(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when we do not have the library defining the class.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
Int_t GetBaseClassOffset(const TClass *toBase, void *address=0, bool isDerivedObject=true)
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
void(* DesFunc_t)(void *)
Bool_t MatchLegacyCheckSum(UInt_t checksum) const
Return true if the checksum passed as argument is one of the checksum value produced by the older che...
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
TIsAProxy implementation class.
virtual Int_t GetClassVersion() const =0
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function)...
const char * GetTrueTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
Double_t dot(const TVector2 &v1, const TVector2 &v2)
THashTable implements a hash table to store TObject's.
TMethod * FindClassOrBaseMethodWithId(DeclId_t faddr)
Find a method with decl id in this class or its bases.
Bool_t HasInterpreterInfoInMemory() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
void Move(void *arenaFrom, void *arenaTo) const
Register the fact that an object was moved from the memory location 'arenaFrom' to the memory locatio...
Bool_t FillTClass(TClass *pcl)
Move data from this TProtoClass into cl.
std::atomic< TList * > fBase
static Int_t ReadRules()
Read the class.rules files from the default location:.
ClassStreamerFunc_t fStreamerFunc
static DeclIdMap_t * GetDeclIdMap()
UChar_t mod R__LOCKGUARD2(gSrvAuthenticateMutex)
Bool_t IsCompiled() const
virtual Int_t GetOffset(const char *) const =0
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
virtual TVirtualCollectionProxy * GenEmulatedProxy(const char *class_name, Bool_t silent)=0
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
Int_t GetDelta()
Get offset from "this" to part of base class.
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
virtual const char * DataMemberInfo_TypeName(DataMemberInfo_t *) const
std::map< std::string, std::string >::const_iterator iter
virtual void BuildOld()=0
void InterpretedShowMembers(void *obj, TMemberInspector &insp, Bool_t isTransient)
Do a ShowMembers() traversal of all members and base classes' members using the reflection informatio...
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time.
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
ROOT::NewArrFunc_t GetNewArray() const
Return the wrapper around new ThisClass[].
virtual void Inspect() const
Dump contents of this object in a graphics canvas.
void AdoptStreamer(TMemberStreamer *p)
virtual Bool_t IsaPointer() const
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
virtual Long_t ClassInfo_GetBaseOffset(ClassInfo_t *, ClassInfo_t *, void *=0, bool=true) const
const char * GetImplFileName() const
TClass * fClass
pointer to the foreign object
virtual TClass * GetActualClass(const void *obj) const =0
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual void * NewArray(Long_t nElements, void *ary=0)=0
void RegisterStreamerInfo(TVirtualStreamerInfo *info)
Register the StreamerInfo in the given slot, change the State of the TClass as appropriate.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
TListOfFunctionTemplates * fFuncTemplate
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
TClass *(* DictFuncPtr_t)()
Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="")
Function called by the Streamer functions to serialize object at p to buffer b.
bool IsInterpreterDetail(const char *type)
Return true if the type is one the interpreter details which are only forward declared (ClassInfo_t e...
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t *, Int_t) const
TViewPubDataMembers * fAllPubData
virtual Bool_t ClassInfo_IsValid(ClassInfo_t *) const
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
TVirtualStreamerInfo * SetStreamerInfo(Int_t version, const char *info="")
Info is a string describing the names and types of attributes written by the class Streamer function...
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
virtual void ls(Option_t *option="") const
List TNamed name and title.
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
std::atomic< StreamerImpl_t > fStreamerImpl
ROOT::DelFunc_t GetDelete() const
Return the wrapper around delete ThiObject.
~InsertTClassInRegistryRAII()
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
View implementing the TList interface and giving access all the TDictionary describing public data me...
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) const
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
const char * fImplFileName
TObject * UncheckedAt(Int_t i) const
virtual void BuildCheck(TFile *file=0)=0
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
virtual const char * ClassInfo_FullName(ClassInfo_t *) const
virtual void Delete(Option_t *option="")
Delete all TFunction object files.
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
TClass * CreateClass(const char *cname, Version_t id, const type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il)
Global function called by a class' static Dictionary() method (see the ClassDef macro).
Using a TBrowser one can browse all ROOT objects.
std::atomic_flag & fAFlag
static void RegisterAddressInRepository(const char *, void *location, const TClass *what)
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
const type_info * fTypeInfo
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
virtual TList * GetListOfMethodArgs()
Returns methodarg list and additionally updates fDataMember in TMethod by calling FindDataMember();...
virtual char * ReadString(char *s, Int_t max)=0
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
virtual Bool_t BuildFor(const TClass *cl)=0
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
R__EXTERN TSystem * gSystem
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
void AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
Adopt the TMemberStreamer pointer to by p and use it to Stream non basic member name.
void *(* NewArrFunc_t)(Long_t size, void *arena)
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.
Basic data type descriptor (datatype information is obtained from CINT).
TObject * Remove(TObject *key)
Remove the (key,value) pair with key from the map.
This class defines an abstract interface that must be implemented by all classes that contain diction...
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
void Init(const char *name, Version_t cversion, const type_info *info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il, ClassInfo_t *classInfo, Bool_t silent)
Initialize a TClass object.
void Store(TBuffer &b) const
Store class description on I/O buffer.
virtual const char * DataMemberInfo_Name(DataMemberInfo_t *) const
void SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
void Delete(Option_t *option="")
Delete is not allowed in this class.
virtual Long_t ClassInfo_Property(ClassInfo_t *) const
ClassInfo_t * GetClassInfo() const
virtual TObject * Remove(TObject *obj)
Remove object from the list.
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
virtual Bool_t HasPointers() const =0
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
Collection abstract base class.
virtual Int_t AutoParse(const char *cls)=0
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
TObject * GetObject() const
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
void SetClass(TClass *cls)
Set the TClass associated with this rule set.
Bool_t HasInterpreterInfo() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
static void StreamerTObject(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects.
Bool_t TestBit(UInt_t f) const
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
void Draw(Option_t *option="")
Draw detailed class inheritance structure.
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Short_t GetDeclFileLine() const
static void UnregisterAddressInRepository(const char *, void *location, const TClass *what)
virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t *) const
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
virtual void * New() const
The TRealData class manages the effective list of all data members for a given class.
virtual void Browse(TBrowser *b)
This method is called by a browser to get the class information.
Bool_t CanIgnoreTObjectStreamer()
virtual const char * GetName() const
Returns name of object.
InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry)
Objects following this interface can be passed onto the TROOT object to implement a user customized w...
The ROOT global object gROOT contains a list of all defined classes.
TVirtualCollectionProxy * fCollectionProxy
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
ROOT::TMapTypeToTClass IdMap_t
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
Version_t GetClassVersion() const
void(* DirAutoAdd_t)(void *, TDirectory *)
virtual TObjLink * FirstLink() const
static Bool_t GetObjectStat()
Get status of object stat flag.
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
virtual void * NewArray(Int_t nElements) const
Each class (see TClass) has a linked list of its base class(es).
void SetCollectionProxy(const ROOT::Detail::TCollectionProxyInfo &)
Create the collection proxy object (and the streamer object) from using the information in the TColle...
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
View implementing the TList interface and giving access all the TFunction describing public methods i...
const char * GetTargetClass() const
Get the targte class of this rule (i.e. the in memory class).
static void StreamerDefault(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Default streaming in cases where either we have no way to know what to do or if Property() has not ye...
Bool_t CallShowMembers(const void *obj, TMemberInspector &insp, Bool_t isTransient=kFALSE) const
Call ShowMembers() on the obj of this class type, passing insp and parent.
static void RemoveClass(TClass *cl)
static: Remove a class from the list and map of classes
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
virtual void SetClass(TClass *classptr)=0
void Load()
Load all the functions known to the interpreter for the scope 'fClass' and all its bases classes...
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE)=0
TMethod * GetClassMethod(Long_t faddr)
Look for a method in this class that has the interface function address faddr.
ROOT::DesFunc_t fDestructor
std::atomic_flag fSpinLock
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
void ForceReload(TClass *oldcl)
we found at least one equivalent.
void SetCanSplit(Int_t splitmode)
Set the splitability of this class: -1: Use the default calculation 0: Disallow splitting 1: Always a...
std::atomic< TListOfFunctions * > fMethod
Short_t GetImplFileLine() const
Bool_t CanSplitBaseAllow()
Pointer to the function implementing the right streaming behavior for the class represented by this o...
ROOT::DelArrFunc_t fDeleteArray
TClass * GetClass() const
Class used by TMap to store (key,value) pairs.
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
virtual int DataMemberInfo_Next(DataMemberInfo_t *) const
virtual Int_t GetSize() const
static const double x1[5]
TObjArray * fStreamerInfo
EMenuItemKind IsMenuItem() const
std::atomic< TClass ** > fPersistentRef
virtual UInt_t Sizeof() const =0
Long_t fOffsetStreamer
Indicates whether GetClassVersion has been called.
virtual const char * GetName() const
Returns name of object.
EState fState
cached of the streaming method to use
virtual TObjArray * GetElements() const =0
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name).
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
virtual int ClassInfo_Size(ClassInfo_t *) const
Wrapper around a TObject so it can be stored in a TList.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
TClass::ENewType & TClass__GetCallingNew()
static void AddClass(TClass *cl)
static: Add a class to the list and map of classes.
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
virtual Long_t DataMemberInfo_Property(DataMemberInfo_t *) const
virtual ~TClass()
TClass dtor. Deletes all list that might have been created.
double func(double *x, double *p)
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
void Add(TObject *obj)
Add object to the hash table.
virtual void * At(UInt_t idx)=0
const std::type_info * GetTypeInfo() const
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
#define R__LOCKGUARD(mutex)
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
Long_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual void Add(TObject *obj)=0
void Dump() const
Dump contents of object on stdout.
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
virtual Version_t GetOldVersion() const =0
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.
std::atomic< Long_t > fProperty
Indicates whether this class can be split or not.
virtual void ClassInfo_DeleteArray(ClassInfo_t *, void *, bool) const
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
Return the wrapper around the directory auto add function.
UInt_t Find(std::list< std::pair< const Node< T > *, Float_t > > &nlist, const Node< T > *node, const T &event, UInt_t nfind)
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
virtual void Update(const TClass *oldClass, TClass *newClass)=0
virtual void Delete(Option_t *option="")
Delete all TDataMember object files.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
IsAGlobalFunc_t fGlobalIsA
pointer to the class's IsA proxy.
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
ROOT::TMapDeclIdToTClass DeclIdMap_t
Long_t fClassProperty
Property.
TDeclNameRegistry(Int_t verbLevel=0)
TDeclNameRegistry class constructor.
virtual TList * GetListForObject(const char *name) const
Return the set of overloads for this name, collecting all available ones.
Mother of all ROOT objects.
Global functions class (global functions are obtained from CINT).
Int_t GetArrayDim() const
Return number of array dimensions.
virtual void Inspect(TClass *cl, const char *parent, const char *name, const void *addr)
TFunctionTemplate * GetFunctionTemplate(const char *name)
static TVirtualStreamerInfo * Factory()
Static function returning a pointer to a new TVirtualStreamerInfo object.
void Load()
Load all the functions known to the interpreter for the scope 'fClass' into this collection.
virtual UInt_t Size() const =0
TClassRef is used to implement a permanent reference to a TClass object.
static std::atomic< Int_t > fgClassCount
TNameMapNode(const char *typedf, const char *orig)
void Unload()
Mark 'all func' as being unloaded.
const char * GetDeclFileName() const
void AddImplFile(const char *filename, int line)
std::atomic< UInt_t > fCheckSum
Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
TListOfDataMembers * fData
const char * GetFullTypeName() const
Get full type description of method argument, e.g.: "class TDirectory*".
void(* DelFunc_t)(void *)
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
virtual Long_t ClassInfo_ClassProperty(ClassInfo_t *) const
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
virtual Int_t GetOnFileClassVersion() const =0
virtual void Add(TObject *obj)
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE)=0
R__EXTERN const char * gRootDir
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Each ROOT class (see TClass) has a linked list of methods.
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
TObject * FindObject(const char *name) const
Find object using its name.
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
const char * GetTargetString() const
Get the target data members of this rule as a simple string (i.e. the in memory data member)...
ClassConvStreamerFunc_t fConvStreamerFunc
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
ClassImp(TSlaveInfo) Int_t TSlaveInfo const TSlaveInfo * si
Used to sort slaveinfos by ordinal.
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' and all its bases classes...
const char * fDeclFileName
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
const TObjArray * GetStreamerInfos() const
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
TClassStreamer * fStreamer
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
virtual Int_t ReadClassEmulated(const TClass *cl, void *object, const TClass *onfile_class=0)=0
void * DynamicCast(const TClass *base, void *obj, Bool_t up=kTRUE)
Cast obj of this class type up to baseclass cl if up is true.
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Bool_t HasDeclName(const char *name) const
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
Bool_t HasDataMemberInfo() const
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
Return the wrapper around Merge.
TObject * At(Int_t idx) const
const Bool_t kIterBackward
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE) const
R__EXTERN TInterpreter * gCling
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Abstract Interface class describing Streamer information for one class.
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
Long_t GetThisOffset() const
virtual const char * GetName() const
Returns name of object.
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
virtual void SetTitle(const char *title="")
Change (i.e. set) the title of the TNamed.
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
void(* DelArrFunc_t)(void *)
void *(* NewFunc_t)(void *)
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
virtual TVirtualRefProxy * Clone() const =0
const char * AsString(void *buf) const
Return string containing value in buffer formatted according to the basic data type.
virtual Bool_t ClassInfo_HasDefaultConstructor(ClassInfo_t *) const
static DictFuncPtr_t GetDictNorm(const char *cname)
Given the normalized class name returns the Dictionary() function of a class (uses hash of name)...
virtual DataMemberInfo_t * DataMemberInfo_Factory(ClassInfo_t *=0) const
TSpinLockGuard(std::atomic_flag &aflag)
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
std::multimap< void *, ObjRepoValue > RepoCont_t
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
Int_t Size() const
Return size of object of this class.
This class stores a (key,value) pair using an external hash.
Ssiz_t First(char c) const
Find first occurrence of a character c.
ROOT::MergeFunc_t fMerge
saved info to call a IsA member function
void AddAt(UInt_t slot, ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table.
void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector &)
Indirect call to the implementation of ShowMember allowing [forward] declaration with out a full defi...
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
TVirtualStreamerInfo * GetStreamerInfoAbstractEmulated(Int_t version=0) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
Bool_t SetFromRule(const char *rule)
Set the content fot this object from the rule See TClass::AddRule for details on the syntax...
TObject * Remove(TObject *obj)
Remove object from the hashtable.
virtual TVirtualCollectionProxy * Generate() const =0
static RepoCont_t gObjectVersionRepository
virtual void WriteString(const char *s)=0
virtual UInt_t GetCheckSum() const =0
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return list containing the TEnums of a class.
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.