110 class TMmallocDescTemp {
140 auto strLen = strlen(name);
141 if (strLen == 0)
return;
143 const char* endCharPtr = strchr(name,
'<');
144 endCharPtr = !endCharPtr ? &name[strLen] : endCharPtr;
146 const char* beginCharPtr = endCharPtr;
147 while (beginCharPtr!=name){
148 if (*beginCharPtr==
':'){
154 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
155 std::string s(beginCharPtr, endCharPtr);
157 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n", s.c_str(),
name);
159 fClassNamesSet.insert(s);
169 found = fClassNamesSet.find(name) != fClassNamesSet.end();
179 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",fClassNamesSet.size());
180 for(
auto const & key:fClassNamesSet){
181 printf(
" - %s\n",key.c_str());
192 while (
fAFlag.test_and_set(std::memory_order_acquire));
199 fAFlag.clear(std::memory_order_release);
228 struct ObjRepoValue {
254 std::pair<RepoCont_t::iterator, Bool_t> tmp =
gObjectVersionRepository.insert(RepoCont_t::value_type>(location, RepoCont_t::mapped_type(what,version)));
256 Warning(where,
"Reregistering an object of class '%s' version %d at address %p", what->
GetName(), version, p);
260 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p", what->
GetName(), version, location);
273 RepoCont_t::iterator tmp = cur++;
274 if ((tmp->first == location) && (tmp->second.fVersion == what->
GetClassVersion())) {
290 size_t objsize = what->
Size();
291 long delta = (
char*)newadd - (
char*)oldadd;
295 RepoCont_t::iterator tmp = cur++;
296 if (oldadd <= tmp->
first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
299 gObjectVersionRepository.insert(RepoCont_t::value_type(((
char*)tmp->first)+delta, RepoCont_t::mapped_type(tmp->second.fClass,tmp->second.fVersion)));
312 #define R__USE_STD_MAP
313 class TMapTypeToTClass {
314 #if defined R__USE_STD_MAP
319 typedef map<string,TClass*>
IdMap_t;
321 typedef std::map<std::string,TClass*>
IdMap_t;
323 typedef IdMap_t::key_type key_type;
324 typedef IdMap_t::const_iterator const_iterator;
325 typedef IdMap_t::size_type size_type;
328 typedef TClass* mapped_type;
330 typedef IdMap_t::mapped_type mapped_type;
337 void Add(
const key_type &key, mapped_type &obj)
342 mapped_type
Find(
const key_type &key)
const
345 IdMap_t::const_iterator
iter = fMap.find(key);
347 if (iter != fMap.end()) cl = iter->second;
350 void Remove(
const key_type &key) {
359 #ifdef R__COMPLETE_MEM_TERMINATION
368 void Add(
const char *key,
TClass *&obj) {
370 fMap.Add(realkey, obj);
377 void Remove(
const char *key) {
379 TObject *actual = fMap.Remove(&realkey);
385 class TMapDeclIdToTClass {
388 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
389 typedef DeclIdMap_t::key_type key_type;
390 typedef DeclIdMap_t::mapped_type mapped_type;
391 typedef DeclIdMap_t::const_iterator const_iterator;
392 typedef std::pair <const_iterator, const_iterator> equal_range;
393 typedef DeclIdMap_t::size_type size_type;
399 void Add(
const key_type &key, mapped_type obj)
402 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
405 size_type CountElementsWithKey(
const key_type &key)
407 return fMap.count(key);
409 equal_range
Find(
const key_type &key)
const
412 return fMap.equal_range(key);
414 void Remove(
const key_type &key) {
423 #ifdef R__COMPLETE_MEM_TERMINATION
434 #ifdef R__COMPLETE_MEM_TERMINATION
451 gROOT->GetListOfClasses()->Add(cl);
465 if (!cl || !
id)
return;
477 gROOT->GetListOfClasses()->Remove(oldcl);
509 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
512 void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
528 const Int_t kvalue = 30;
530 const Int_t ktitle = 50;
532 const Int_t ktitle = 42;
534 const Int_t kline = 1024;
542 const char *memberName;
543 const char *memberFullTypeName;
544 const char *memberTitle;
549 if (member->GetDataType()) {
550 memberDataType = (
EDataType)member->GetDataType()->GetType();
552 memberName = member->GetName();
553 memberFullTypeName = member->GetFullTypeName();
554 memberTitle = member->GetTitle();
555 isapointer = member->IsaPointer();
556 isbasic = member->IsBasic();
563 const char *cursor = mname;
564 while ( (*cursor)==
'*' ) ++cursor;
566 Ssiz_t pos = elname.Index(
"[");
567 if ( pos !=
kNPOS ) {
568 elname.Remove( pos );
571 if (!element)
return;
576 memberName = element->
GetName();
579 membertype =
gROOT->GetType(memberFullTypeName);
581 isbasic = membertype !=0;
588 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
592 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
597 static TClassRef stdClass(
"std::string");
598 Bool_t isStdString = (dataClass == stdClass);
601 for (i = 0;i < kline; i++) line[i] =
' ';
603 snprintf(line,kline,
"%s%s ",pname,mname);
604 i = strlen(line); line[i] =
' ';
607 char *pointer = (
char*)add;
608 char **ppointer = (
char**)(pointer);
611 char **p3pointer = (
char**)(*ppointer);
613 snprintf(&line[kvalue],kline-kvalue,
"->0");
616 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)p3pointer);
618 }
else if (membertype) {
620 i = strlen(*ppointer);
621 if (kvalue+i > kline) i=kline-1-kvalue;
623 for (
Int_t j = 0; j < i; j++) {
624 if (!std::isprint((*ppointer)[j])) {
630 strncpy(line + kvalue, *ppointer, i);
636 strncpy(&line[kvalue], membertype->
AsString(p3pointer),
TMath::Min(kline-1-kvalue,(
int)strlen(membertype->
AsString(p3pointer))));
638 }
else if (!strcmp(memberFullTypeName,
"char*") ||
639 !strcmp(memberFullTypeName,
"const char*")) {
640 i = strlen(*ppointer);
641 if (kvalue+i >= kline) i=kline-1-kvalue;
643 for (
Int_t j = 0; j < i; j++) {
644 if (!std::isprint((*ppointer)[j])) {
650 strncpy(line + kvalue, *ppointer, i);
657 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)p3pointer);
660 }
else if (membertype) {
662 cdatime = (
UInt_t*)pointer;
664 snprintf(&line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
666 snprintf(&line[kvalue],kline-kvalue,
"0x%08x", *(
UInt_t*)pointer);
672 std::string *str = (std::string*)pointer;
673 snprintf(&line[kvalue],kline-kvalue,
"%s",str->c_str());
674 }
else if (isTString) {
676 snprintf(&line[kvalue],kline-kvalue,
"%s",str->
Data());
679 snprintf(&line[kvalue],kline-kvalue,
"->%lx ", (
Long_t)pointer);
684 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
685 i = strlen(&line[0]); line[i] =
' ';
686 Int_t lentit = strlen(memberTitle);
687 if (lentit > 250-ktitle) lentit = 250-ktitle;
688 strncpy(&line[ktitle],memberTitle,lentit);
689 line[ktitle+lentit] = 0;
711 void *fRealDataObject;
715 TBuildRealData(
void *obj,
TClass *cl) {
717 fRealDataObject =
obj;
721 void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
740 isTransientMember =
kTRUE;
747 if (cl != fRealDataClass) {
748 if (!fRealDataClass->InheritsFrom(cl)) {
749 Ssiz_t dot = rname.Index(
'.');
754 if (!fRealDataClass->GetDataMember(rname)) {
769 if (!fRealDataClass->GetBaseDataMember(rname)) {
785 fRealDataClass->GetListOfRealData()->Add(rd);
790 fRealDataClass->GetListOfRealData()->Add(rd);
836 void* addrForRecursion = 0;
837 if (GetObjectValidity() == kValidObjectGiven)
838 addrForRecursion =
const_cast<void*
>(add);
845 fRealDataClass->GetListOfRealData()->Add(rd);
862 fBrowser = b; fCount = 0; }
863 virtual ~TAutoInspector() { }
865 virtual void Inspect(
TClass *cl,
const char *parent,
const char *name,
const void *addr,
Bool_t isTransient);
866 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
873 const void *addr,
Bool_t )
875 if(tit && strchr(tit,
'.'))
return ;
876 if (fCount && !fBrowser)
return;
882 if (*name ==
'*') name++;
883 int ln = strcspn(name,
"[ ");
887 if (!classInfo)
return;
897 if ((found = (iname==mname)))
break;
906 if (prop & kIsStatic)
return;
907 if (prop & kIsFundamental)
return;
908 if (prop & kIsEnum)
return;
909 if (mname ==
"G__virtualinfo")
return;
911 int size =
sizeof(
void*);
914 if (prop & kIsArray) {
922 if (!(prop & kIsPointer)) {
931 for(
int i=0; i<nmax; i++) {
933 char *ptr = (
char*)addr + i*size;
940 if (!fBrowser)
return;
948 bwname = actualClass->
GetName();
957 int l = strcspn(bwname.
Data(),
"[ ");
958 if (l<bwname.
Length() && bwname[
l]==
'[') {
959 char cbuf[12]; snprintf(cbuf,12,
"[%02d]",i);
962 bwname = (
const char*)ts;
968 fBrowser->Add(obj,clm,bwname);
975 fBrowser->Add( obj, clm, bwname );
981 int sz = proxy->
Size();
983 char fmt[] = {
"#%09d"};
984 fmt[3] =
'0'+(int)
log10(
double(sz))+1;
986 for (
int ii=0;
ii<sz;
ii++) {
987 void *p = proxy->
At(
ii);
996 snprintf(buf,20,fmt,
ii);
999 fBrowser->Add( p, actualCl, ts );
1038 TMmallocDescTemp setreset;
1074 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1077 TMmallocDescTemp setreset;
1084 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1088 ::
Warning(
"TClass::TClass",
"no dictionary for class %s is available", name);
1102 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1103 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1104 fAllPubMethod(0), fClassMenuList(0),
1105 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1106 fInstanceCount(0), fOnHeap(0),
1107 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1108 fTypeInfo(0), fShowMembers(0),
1109 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1110 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1111 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1112 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1115 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1116 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1119 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1129 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1130 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1131 fAllPubMethod(0), fClassMenuList(0),
1132 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1133 fInstanceCount(0), fOnHeap(0),
1134 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1135 fTypeInfo(0), fShowMembers(0),
1136 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1137 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1138 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1139 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1142 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1143 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1155 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1156 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1173 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1174 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1175 fAllPubMethod(0), fClassMenuList(0),
1176 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1177 fInstanceCount(0), fOnHeap(0),
1178 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1179 fTypeInfo(0), fShowMembers(0),
1180 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1181 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1182 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1183 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1186 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1187 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1192 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1198 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1200 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1207 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1223 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1224 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1225 fAllPubMethod(0), fClassMenuList(0),
1226 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1227 fInstanceCount(0), fOnHeap(0),
1228 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1229 fTypeInfo(0), fShowMembers(0),
1230 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1231 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1232 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1233 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1236 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1237 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1240 Init(name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1249 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1253 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1254 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1257 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1258 fInstanceCount(0), fOnHeap(0),
1259 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1260 fTypeInfo(0), fShowMembers(0),
1261 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1262 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1263 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1264 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1266 fState(kHasTClassInit),
1267 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1268 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1272 Init(name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1290 info->
Clear(
"build");
1306 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1307 ClassInfo_t *givenInfo,
1311 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1343 TClass **persistentRef = 0;
1361 info->
Clear(
"build");
1380 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1441 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass initialization routine.",
fName.
Data());
1457 if (!givenInfo && strchr (name,
'<')) {
1458 if (
fName != name) {
1469 if (resolvedThis != name) {
1493 if (resolvedThis !=
fName) {
1494 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(resolvedThis);
1495 if (oldcl && oldcl !=
this) {
1502 if (resolvedThis != htmp->String())
continue;
1503 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(htmp->fOrigName);
1504 if (oldcl && oldcl !=
this) {
1522 if (persistentRef) {
1529 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1540 }
else if (!silent) {
1541 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1547 }
else if (!strncmp(
GetName(),
"std::pair<",10) || !strncmp(
GetName(),
"pair<",5) ) {
1567 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1634 std::map<std::string, TObjArray*>::iterator it;
1635 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1636 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1646 Int_t ReadRulesContent(FILE *f)
1658 while ((c = fgetc(f)) != EOF) {
1664 if (rule.Length() > 0) {
1716 static const char *suffix =
"class.rules";
1732 FILE * f = fopen(sname,
"r");
1734 res = ReadRulesContent(f);
1748 if (!filename || !filename[0]) {
1749 ::Error(
"TClass::ReadRules",
"no file name specified");
1753 FILE * f = fopen(filename,
"r");
1755 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1758 Int_t count = ReadRulesContent(f);
1811 ::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).",
1872 TAutoInspector insp(b);
1873 obj->ShowMembers(insp);
1894 }
else if (actual !=
this) {
1895 return actual->
Browse(obj, b);
1901 TAutoInspector insp(b);
1944 isTransient =
kTRUE;
1949 TMmallocDescTemp setreset;
1960 static TClassRef clRefString(
"std::string");
1961 if (clRefString ==
this) {
1970 && strncmp(
GetName(),
"pair<", 5) != 0) {
1971 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
1977 TBuildRealData brd(pointer,
this);
1983 if ( isTransient ) {
1991 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2026 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2035 Long_t eoffset = element->GetOffset();
2036 TClass *cle = element->GetClassPointer();
2045 TString rdname; rdname.
Form(
"%s%s",name,element->GetFullName());
2050 rdname.
Form(
"%s%s.",name,element->GetFullName());
2054 TString rdname; rdname.
Form(
"%s%s",name,element->GetFullName());
2068 Int_t etype = element->GetType();
2071 Long_t eoffset = element->GetOffset();
2072 TClass *cle = element->GetClassPointer();
2092 TMmallocDescTemp setreset;
2119 if (strcmp(
GetName(),
"string") == 0) {
2127 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2131 sinfo->CallShowMembers(obj, insp, isTransient);
2146 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2184 static TClassRef stdStringClass(
"std::string");
2258 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2259 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2289 copy->
fName = new_name;
2344 if (!padsav || !opt.
Contains(
"same")) {
2347 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2353 if (
gPad)
gPad->DrawClassObject(
this,option);
2355 if (padsav) padsav->
cd();
2396 if (
sizeof(
this) == 4)
2399 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2402 if (
sizeof(
this) == 4)
2403 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2405 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2408 TDumpMembers dm(noAddr);
2410 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2421 static char name[maxsize+2];
2423 UInt_t nch = strlen(text);
2425 for (
UInt_t i = 0; i < nch && icur <
maxsize; ++i, ++icur) {
2426 if (text[i] ==
'\"' || text[i] ==
'[' || text[i] ==
'~' ||
2427 text[i] ==
']' || text[i] ==
'&' || text[i] ==
'#' ||
2428 text[i] ==
'!' || text[i] ==
'^' || text[i] ==
'<' ||
2429 text[i] ==
'?' || text[i] ==
'>') {
2433 name[icur] = text[i];
2459 if (
object==0)
return (
TClass*)
this;
2461 return (*
fIsA)(object);
2472 return realTObject->IsA();
2489 return (*
fIsA)(object);
2507 if (strcmp(
GetName(), classname) == 0)
return this;
2526 if (cl ==
this)
return this;
2538 if (cl == c)
return c;
2557 if (cl ==
this)
return 0;
2566 if (!sinfo)
return -1;
2572 for(
Int_t i=0; i<size; i++) {
2577 if (!baseclass)
return -1;
2579 if (subOffset == -2)
return -2;
2580 if (subOffset != -1)
return offset+subOffset;
2581 offset += baseclass->
Size();
2610 if (off == -2)
return -2;
2629 if (
this == toBase)
return 0;
2645 if(derived && base) {
2666 if (dm)
return this;
2675 if (cdm)
return cdm;
2686 struct TClassLocalStorage {
2687 TClassLocalStorage() : fCollectionProxy(0), fStreamer(0) {};
2692 static TClassLocalStorage *GetStorage(
const TClass *cl)
2698 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2705 local = (
ULong_t)
new TClassLocalStorage();
2708 return (TClassLocalStorage*)local;
2736 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2739 return local->fCollectionProxy;
2750 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2752 if (local->fStreamer==0) {
2754 const type_info &orig = (
typeid(*fStreamer) );
2755 if (!local->fStreamer) {
2756 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2758 const type_info © = (
typeid(*local->fStreamer) );
2759 if (strcmp(orig.name(),copy.name())!=0) {
2760 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2764 return local->fStreamer;
2803 if (!name || !name[0])
return 0;
2805 if (strstr(name,
"(anonymous)"))
return 0;
2806 if (strncmp(name,
"class ",6)==0) name += 6;
2807 if (strncmp(name,
"struct ",7)==0) name += 7;
2811 if (!
gROOT->GetListOfClasses())
return 0;
2846 if (!cl && !load)
return 0;
2858 std::string normalizedName;
2866 if (normalizedName != name) {
2867 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(normalizedName.c_str());
2878 normalizedName = cl->
GetName();
2879 checkTable = load && (normalizedName !=
name);
2882 if (!load)
return 0;
2908 if (
TDataType* theDataType =
gROOT->GetType(normalizedName.c_str())){
2910 auto underlyingTypeName = theDataType->GetTypeName();
2913 if (underlyingTypeDict){
2914 loadedcl = underlyingTypeDict();
2920 if (loadedcl)
return loadedcl;
2924 if (loadedcl)
return loadedcl;
2937 std::string::size_type posLess = normalizedName.find(
'<');
2938 if (posLess != std::string::npos) {
2945 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());
2947 if (normalizedName.length() &&
2951 std::string alternative;
2953 const char *altname = alternative.c_str();
2954 if ( strncmp(altname,
"std::",5)==0 ) {
2959 if (altname != normalizedName && strcmp(altname,name) != 0) {
2987 if (!
gROOT->GetListOfClasses())
return 0;
3008 if (!load)
return 0;
3030 if (!autoload_old) {
3062 if (!
gROOT->GetListOfClasses())
return 0;
3070 if (cl->IsLoaded())
return cl;
3077 if (!load)
return 0;
3080 if (cl) loadedcl =
gROOT->LoadClass(cl->GetName(),silent);
3081 else loadedcl =
gROOT->LoadClass(name,silent);
3083 if (loadedcl)
return loadedcl;
3108 if (!
gROOT->GetListOfClasses())
return 0;
3112 DeclIdMap_t::equal_range
iter = map->Find(
id);
3113 if (iter.first == iter.second)
return false;
3114 std::vector<TClass*>::iterator vectIt = classes.begin();
3115 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3116 vectIt = classes.insert(vectIt, it->second);
3144 || datamember == 0)
return 0;
3147 const char *start_name = datamember;
3148 while (*start_name ==
'*') ++start_name;
3153 if (
const char *s = strchr(start_name,
'[')){
3154 UInt_t len = s-start_name;
3173 if (strchr(name,
'[')==0) {
3215 std::string givenName(name);
3218 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3219 if (firstBracket != std::string::npos) {
3221 std::string nameNoDim(givenName.substr(0, firstBracket));
3224 TObject* obj = lnk->GetObject();
3225 std::string objName(obj->
GetName());
3226 std::string::size_type pos = objName.find_first_of(
"[");
3228 if (pos != std::string::npos) {
3230 if (objName == nameNoDim) {
3239 std::ostringstream ptrname;
3240 ptrname <<
"*" << givenName;
3247 std::string::size_type firstDot = givenName.find_first_of(
".");
3248 if (firstDot == std::string::npos) {
3259 std::string::size_type lastDot = givenName.find_last_of(
".");
3260 std::ostringstream starname;
3261 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3269 std::string firstDotName(givenName.substr(firstDot + 1));
3283 std::string::size_type firstDotBracket = firstDotName.find_first_of(
"[");
3284 if (firstDotBracket != std::string::npos) {
3286 std::string nameNoDim(firstDotName.substr(0, firstDotBracket));
3289 TObject* obj = lnk->GetObject();
3290 std::string objName(obj->
GetName());
3291 std::string::size_type pos = objName.find_first_of(
"[");
3293 if (pos != std::string::npos) {
3295 if (objName == nameNoDim) {
3308 ptrname <<
"*" << firstDotName;
3324 std::string::size_type bracket = starname.str().find_first_of(
"[");
3325 if (bracket == std::string::npos) {
3395 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3410 auto temp =
fEnums.load();
3440 if (load) (*fEnums).Load();
3514 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3547 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3577 while ((baseClass = (
TBaseClass *) nextBase())) {
3616 return cl->IsLoaded();
3630 TClass* baseCl = base->Class();
3644 TIter nextMemb(ldm);
3674 for (
int i = 0; i < 2; i++) {
3690 if (
this == sCIString)
return;
3693 if (strncmp(
fName,
"pair<", 5) == 0) {
3741 if (
this == sCIString)
return;
3745 if (strncmp(
fName,
"pair<", 5) == 0) {
3800 while ((acl = (
TClass*)nextClass())) {
3801 if (acl == newcl)
continue;
3803 TIter nextInfo(acl->GetStreamerInfos());
3806 info->
Update(
this, newcl);
3809 if (acl->GetCollectionProxy()) {
3810 acl->GetCollectionProxy()->UpdateValueClass(
this, newcl);
3815 TIter delIter( &tobedeleted );
3816 while ((acl = (
TClass*)delIter())) {
3829 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
3880 (*fMethod).Unload();
3914 if (options==0 || options[0]==0)
return;
3916 if (strstr(options,
"streamerinfo")!=0) {
3920 std::map<std::string, TObjArray*>::iterator it;
3921 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
3922 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
3923 it->second->ls(options);
3954 if (classPtr != method->
GetClass()) {
3962 TIter nextarg(margsList);
3963 while ((methodArg = (
TMethodArg*)nextarg())) {
4013 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4071 Fatal(
"GetMethod",
"gInterpreter not initialized");
4077 if (!decl)
return 0;
4084 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4085 method,params,objectIsConst ?
"const " :
"",
GetName());
4121 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4125 objectIsConst, mode);
4127 if (!decl)
return 0;
4130 Error(
"GetMethodWithPrototype",
4131 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4132 method,proto,objectIsConst ?
"const " :
"",
GetName());
4166 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4172 if (!decl)
return 0;
4192 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4199 if (!decl)
return 0;
4275 if ((version < -1) || (version >= ninfos)) {
4276 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4292 TMmallocDescTemp setreset;
4344 newname +=
"@@emulated";
4367 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4380 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4404 newname +=
"@@emulated";
4418 if (!sinfo && (checksum !=
fCheckSum)) {
4427 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4440 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4486 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4512 if (cl ==
this)
return kTRUE;
4521 TClass *clbase = element->GetClassPointer();
4522 if (!clbase)
return kFALSE;
4529 if (((
TClass *)
this)->GetBaseClass(cl))
return kTRUE;
4541 if (cl ==
this)
return obj;
4548 return (
void*)((
Long_t)obj+off);
4550 return (
void*)((
Long_t)obj-off);
4616 Error(
"New",
"cannot create object of class %s",
GetName());
4632 Error(
"New",
"cannot create object of class %s",
GetName());
4643 Error(
"New",
"cannot create object of class %s",
GetName());
4664 if (!sinfo && !quiet) {
4683 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
4686 Fatal(
"New",
"This cannot happen!");
4710 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4725 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4753 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
4758 p = sinfo->
New(arena);
4772 Error(
"New with placement",
"This cannot happen!");
4859 Error(
"NewArray",
"This cannot happen!");
4883 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4898 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4926 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
4931 p = sinfo->
NewArray(nElements, arena);
4950 Error(
"NewArray with placement",
"This cannot happen!");
4962 if (obj == 0)
return;
4969 }
else if ((!dtorOnly) &&
fDelete) {
5001 std::multiset<Version_t> knownVersions;
5014 knownVersions.insert(ver);
5022 if (!inRepo || verFound) {
5029 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5035 Error(
"Destructor",
"Doing Dump() ...");
5050 Error(
"Destructor2",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5057 Error(
"Destructor2",
"Doing Dump() ...");
5065 if (inRepo && verFound && p) {
5069 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5079 if (ary == 0)
return;
5086 Error(
"DeleteArray",
"Destructor only is not supported!");
5115 std::multiset<Version_t> knownVersions;
5126 knownVersions.insert(ver);
5134 if (!inRepo || verFound) {
5141 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5147 Error(
"DeleteArray",
"Doing Dump() ...");
5156 Error(
"DeleteArray",
"Loaded class version %d is not registered for addr %p",
fClassVersion, p);
5165 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5172 Error(
"DeleteArray",
"Doing Dump() ...");
5183 if (inRepo && verFound && p) {
5187 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5262 while (strlen(s) == (maxsize - 1)) {
5273 ::Error(
"TClass::Load",
"dictionary of class %s not found", s);
5297 if (result)
return result;
5373 ::Error(
"TClass::LoadClassInfo",
5374 "no interpreter information for class %s is available even though it has a TClass initialization routine.",
5395 const char *dfil,
const char *ifil,
5400 TMmallocDescTemp setreset;
5401 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5409 const char *dfil,
const char *ifil,
5414 TMmallocDescTemp setreset;
5415 return new TClass(cname,
id, dfil, ifil, dl, il);
5517 The class %s transitioned from not having a specified class version\n\
5518 to having a specified class version (the current class version is %d).\n\
5519 However too many different non-versioned layouts of the class have\n\
5520 already been loaded so far. To work around this problem you can\n\
5521 load fewer 'old' file in the same ROOT session or load the C++ library\n\
5522 describing the class %s before opening the files or increase the version\n\
5523 number of the class for example ClassDef(%s,%d).\n\
5524 Do not try to write objects with the current class definition,\n\
5525 the files might not be readable.\n",
5529 The StreamerInfo version %d for the class %s which was read\n\
5530 from a file previously opened has the same version as the active class\n\
5531 but a different checksum. You should update the version to ClassDef(%s,%d).\n\
5532 Do not try to write objects with the current class definition,\n\
5533 the files will not be readable.\n"
5578 TMmallocDescTemp setreset;
5766 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
5791 (*fMethod).Unload();
5800 if (fState <= kForwardDeclared && fStreamerInfo->GetEntries() != 0) {
5893 //info is empty. Let's build the default Streamer descriptor
5895 char *temp = new char[10000];
5899 //add list of base classes
5900 TIter nextb(GetListOfBases());
5902 while ((base = (TBaseClass*) nextb())) {
5903 snprintf(local,100,"%s;",base->GetName());
5904 strlcat(temp,local,10000);
5907 //add list of data members and types
5908 TIter nextd(GetListOfDataMembers());
5909 while ((dm = (TDataMember *) nextd())) {
5910 if (dm->IsEnum()) continue;
5911 if (!dm->IsPersistent()) continue;
5912 Long_t property = dm->Property();
5913 if (property & kIsStatic) continue;
5914 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
5917 if (acl->GetClassVersion() == 0) continue;
5920 // dm->GetArrayIndex() returns an empty string if it does not
5922 const char * index = dm->GetArrayIndex();
5923 if (strlen(index)==0)
5924 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
5926 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
5927 strlcat(temp,local,10000);
5929 //fStreamerInfo = temp;
6018 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6023 TIter nextBase(tlb);
6032 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6035 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6044 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6046 TIter nextMemb(tlm);
6056 if ( prop&kIsStatic)
continue;
6062 for (i=0; i<il; i++)
id =
id*3+name[i];
6074 type.
ReplaceAll(
"ULong64_t",
"unsigned long long");
6078 if (type==
"signed char") type =
"char";
6090 for (i=0; i<il; i++)
id =
id*3+type[i];
6093 if (prop&kIsArray) {
6101 left = strstr(tdm->
GetTitle(),
"[");
6103 const char *right = strstr(left,
"]");
6106 while (left != right) {
6232 streamer->
Stream(b,
object,onfile_class);
6322 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
6484 for (
Int_t i=-1;i<ninfos;++i) {
6506 for (
Int_t i=-1;i<ninfos;i++) {
6510 if (!info)
continue;
6551 std::map<std::string, TObjArray*>::iterator it;
6554 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6556 if( it != (*fConversionStreamerInfo).end() ) {
6560 if( arr && version > -1 && version < arr->GetSize() && arr->
At( version ) )
6572 if( version >= -1 && version < clSI->GetSize() )
6610 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6649 std::map<std::string, TObjArray*>::iterator it;
6653 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6655 if( it != (*fConversionStreamerInfo).end() ) {
6704 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6723 Error(
"RegisterStreamerInfo",
6724 "Register StreamerInfo for %s on non-empty slot (%d).",
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.
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
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...
TClass *(* DictFuncPtr_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(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
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
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.
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
TString GetTypeName()
Get basic type of typedef, e,g.
const char * GetVersion() const
Get the version string.
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,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
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.
TMatrixT< Element > & Add(TMatrixT< Element > &target, Element scalar, const TMatrixT< Element > &source)
Modify addition: target += scalar * source.
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.
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
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
void *(* NewArrFunc_t)(Long_t size, void *arena)
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
bool IsSTLBitset(const char *type)
Return true is the name is std::bitset<number> or bitset<number>
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
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*".
void(* DirAutoAdd_t)(void *, 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.
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.
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.
static Int_t ReadRules()
Read the class.rules files from the default location:.
ClassStreamerFunc_t fStreamerFunc
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
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.
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[].
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
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().
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.
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.
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.
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
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).
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...
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
TObject * GetObject() const
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
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.
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
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
static TVirtualMutex * gOVRMutex
Each class (see TClass) has a linked list of its base class(es).
Bool_t HasDictionary()
Check whether a class has a dictionary or not.
void SetCollectionProxy(const ROOT::Detail::TCollectionProxyInfo &)
Create the collection proxy object (and the streamer object) from using the information in the TColle...
TListOfFunctions * GetMethodList()
Pointer to the function implementing the right streaming behavior for the class represented by this o...
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
TEllipse dict(9, 20, 3, 1.5)
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(* DesFunc_t)(void *)
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
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
void *(* NewFunc_t)(void *)
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.
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
void(* ClassStreamerFunc_t)(TBuffer &, void *)
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.
void(* DelArrFunc_t)(void *)
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
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
#define R__LOCKGUARD(mutex)
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
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
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)
TVirtualMutex * gInterpreterMutex
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*".
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.
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.
const type_info * GetTypeInfo() const
void(* DelFunc_t)(void *)
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...
TText gen(9, 20.7,"rootcint")
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.