45 #include "TClassEdit.h"
97 #define RTLD_DEFAULT ((void *)::GetModuleHandle(NULL))
98 #define dlsym(library, function_name) ::GetProcAddress((HMODULE)library, function_name)
123 class TMmallocDescTemp {
127 TMmallocDescTemp(
void *value = 0) :
154 auto strLen = strlen(name);
155 if (strLen == 0)
return;
157 const char* endCharPtr = strchr(name,
'<');
158 endCharPtr = !endCharPtr ? &name[strLen] : endCharPtr;
160 const char* beginCharPtr = endCharPtr;
161 while (beginCharPtr!=name){
162 if (*beginCharPtr==
':'){
168 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
169 std::string s(beginCharPtr, endCharPtr);
171 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n", s.c_str(),
name);
173 fClassNamesSet.insert(s);
183 found = fClassNamesSet.find(name) != fClassNamesSet.end();
192 if (fVerbLevel > 1) {
193 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",
194 (
long unsigned int)fClassNamesSet.size());
195 for (
auto const & key: fClassNamesSet) {
196 printf(
" - %s\n", key.c_str());
207 while (
fAFlag.test_and_set(std::memory_order_acquire));
214 fAFlag.clear(std::memory_order_release);
243 struct ObjRepoValue {
244 ObjRepoValue(
const TClass *what,
Version_t version) : fClass(what),fVersion(version) {}
269 std::pair<RepoCont_t::iterator, Bool_t> tmp =
gObjectVersionRepository.insert(RepoCont_t::value_type>(location, RepoCont_t::mapped_type(what,version)));
271 Warning(where,
"Reregistering an object of class '%s' version %d at address %p", what->
GetName(), version, p);
275 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p", what->
GetName(), version, location);
288 RepoCont_t::iterator tmp = cur++;
289 if ((tmp->first == location) && (tmp->second.fVersion == what->
GetClassVersion())) {
305 size_t objsize = what->
Size();
306 long delta = (
char*)newadd - (
char*)oldadd;
310 RepoCont_t::iterator tmp = cur++;
311 if (oldadd <= tmp->first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
314 gObjectVersionRepository.insert(RepoCont_t::value_type(((
char*)tmp->first)+delta, RepoCont_t::mapped_type(tmp->second.fClass,tmp->second.fVersion)));
327 #define R__USE_STD_MAP
328 class TMapTypeToTClass {
329 #if defined R__USE_STD_MAP
334 typedef map<string,TClass*>
IdMap_t;
336 typedef std::map<std::string,TClass*>
IdMap_t;
338 typedef IdMap_t::key_type key_type;
339 typedef IdMap_t::const_iterator const_iterator;
340 typedef IdMap_t::size_type size_type;
343 typedef TClass* mapped_type;
345 typedef IdMap_t::mapped_type mapped_type;
352 void Add(
const key_type &key, mapped_type &obj)
357 mapped_type
Find(
const key_type &key)
const
360 IdMap_t::const_iterator iter = fMap.find(key);
362 if (iter != fMap.end()) cl = iter->second;
365 void Remove(
const key_type &key) {
374 #ifdef R__COMPLETE_MEM_TERMINATION
383 void Add(
const char *key,
TClass *&obj) {
385 fMap.Add(realkey, obj);
392 void Remove(
const char *key) {
394 TObject *actual = fMap.Remove(&realkey);
400 class TMapDeclIdToTClass {
403 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
404 typedef DeclIdMap_t::key_type key_type;
405 typedef DeclIdMap_t::mapped_type mapped_type;
406 typedef DeclIdMap_t::const_iterator const_iterator;
407 typedef std::pair <const_iterator, const_iterator> equal_range;
408 typedef DeclIdMap_t::size_type size_type;
414 void Add(
const key_type &key, mapped_type obj)
417 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
420 size_type CountElementsWithKey(
const key_type &key)
422 return fMap.count(key);
424 equal_range
Find(
const key_type &key)
const
427 return fMap.equal_range(key);
429 void Remove(
const key_type &key) {
438 #ifdef R__COMPLETE_MEM_TERMINATION
449 #ifdef R__COMPLETE_MEM_TERMINATION
466 gROOT->GetListOfClasses()->Add(cl);
480 if (!cl || !
id)
return;
492 gROOT->GetListOfClasses()->Remove(oldcl);
524 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
543 const Int_t kvalue = 30;
545 const Int_t ktitle = 50;
547 const Int_t ktitle = 42;
549 const Int_t kline = 1024;
557 const char *memberName;
558 const char *memberFullTypeName;
559 const char *memberTitle;
564 if (member->GetDataType()) {
565 memberDataType = (
EDataType)member->GetDataType()->GetType();
567 memberName = member->GetName();
568 memberFullTypeName = member->GetFullTypeName();
569 memberTitle = member->GetTitle();
570 isapointer = member->IsaPointer();
571 isbasic = member->IsBasic();
578 const char *cursor = mname;
579 while ( (*cursor)==
'*' ) ++cursor;
580 TString elname( cursor );
581 Ssiz_t pos = elname.Index(
"[");
582 if ( pos !=
kNPOS ) {
583 elname.Remove( pos );
586 if (!element)
return;
591 memberName = element->
GetName();
594 membertype =
gROOT->GetType(memberFullTypeName);
596 isbasic = membertype !=0;
603 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
607 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
612 static TClassRef stdClass(
"std::string");
613 Bool_t isStdString = (dataClass == stdClass);
616 for (i = 0;i < kline; i++) line[i] =
' ';
618 snprintf(line,kline,
"%s%s ",pname,mname);
619 i = strlen(line); line[i] =
' ';
622 char *pointer = (
char*)add;
623 char **ppointer = (
char**)(pointer);
626 char **p3pointer = (
char**)(*ppointer);
628 snprintf(&line[kvalue],kline-kvalue,
"->0");
633 }
else if (membertype) {
635 i = strlen(*ppointer);
636 if (kvalue+i > kline) i=kline-1-kvalue;
638 for (
Int_t j = 0; j < i; j++) {
639 if (!std::isprint((*ppointer)[j])) {
645 strncpy(line + kvalue, *ppointer, i);
651 strncpy(&line[kvalue], membertype->
AsString(p3pointer),
TMath::Min(kline-1-kvalue,(
int)strlen(membertype->
AsString(p3pointer))));
653 }
else if (!strcmp(memberFullTypeName,
"char*") ||
654 !strcmp(memberFullTypeName,
"const char*")) {
655 i = strlen(*ppointer);
656 if (kvalue+i >= kline) i=kline-1-kvalue;
658 for (
Int_t j = 0; j < i; j++) {
659 if (!std::isprint((*ppointer)[j])) {
665 strncpy(line + kvalue, *ppointer, i);
675 }
else if (membertype) {
677 cdatime = (
UInt_t*)pointer;
679 snprintf(&line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
687 std::string *str = (std::string*)pointer;
688 snprintf(&line[kvalue],kline-kvalue,
"%s",str->c_str());
689 }
else if (isTString) {
690 TString *str = (TString*)pointer;
691 snprintf(&line[kvalue],kline-kvalue,
"%s",str->Data());
699 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
700 i = strlen(&line[0]); line[i] =
' ';
701 Int_t lentit = strlen(memberTitle);
702 if (lentit > 250-ktitle) lentit = 250-ktitle;
703 strncpy(&line[ktitle],memberTitle,lentit);
704 line[ktitle+lentit] = 0;
726 void *fRealDataObject;
730 TBuildRealData(
void *obj,
TClass *cl) {
732 fRealDataObject = obj;
755 isTransientMember =
kTRUE;
759 TString rname( pname );
762 if (cl != fRealDataClass) {
763 if (!fRealDataClass->InheritsFrom(cl)) {
764 Ssiz_t dot = rname.Index(
'.');
769 if (!fRealDataClass->GetDataMember(rname)) {
784 if (!fRealDataClass->GetBaseDataMember(rname)) {
799 fRealDataClass->GetListOfRealData()->Add(rd);
809 fRealDataClass->GetListOfRealData()->Add(rd);
854 void* addrForRecursion = 0;
855 if (GetObjectValidity() == kValidObjectGiven)
856 addrForRecursion =
const_cast<void*
>(add);
863 fRealDataClass->GetListOfRealData()->Add(rd);
880 fBrowser =
b; fCount = 0; }
881 virtual ~TAutoInspector() { }
884 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
891 const void *addr,
Bool_t )
893 if(tit && strchr(tit,
'.')) return ;
894 if (fCount && !fBrowser)
return;
900 if (*name ==
'*') name++;
901 int ln = strcspn(name,
"[ ");
902 TString iname(name,ln);
905 if (!classInfo)
return;
914 mname.ReplaceAll(
"*",
"");
915 if ((found = (iname==mname)))
break;
927 if (mname ==
"G__virtualinfo")
return;
929 int size =
sizeof(
void*);
937 TClassEdit::kDropTrailStar) );
949 for(
int i=0; i<nmax; i++) {
951 char *ptr = (
char*)addr + i*size;
958 if (!fBrowser)
return;
966 bwname = actualClass->
GetName();
972 bwname.Length()==0 ||
973 strcmp(bwname.Data(),actualClass->
GetName())==0) {
975 int l = strcspn(bwname.Data(),
"[ ");
976 if (l<bwname.Length() && bwname[
l]==
'[') {
977 char cbuf[13];
snprintf(cbuf,13,
"[%02d]",i);
978 ts.Replace(0,999,bwname,l);
980 bwname = (
const char*)ts;
986 fBrowser->Add(obj,clm,bwname);
993 fBrowser->Add( obj, clm, bwname );
999 int sz = proxy->
Size();
1001 char fmt[] = {
"#%09d"};
1002 fmt[3] =
'0'+(int)
log10(
double(sz))+1;
1004 for (
int ii=0;ii<sz;ii++) {
1005 void *p = proxy->
At(ii);
1017 fBrowser->Add( p, actualCl, ts );
1056 TMmallocDescTemp setreset;
1092 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1095 TMmallocDescTemp setreset;
1102 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1106 ::
Warning(
"TClass::TClass",
"no dictionary for class %s is available", name);
1120 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1121 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1122 fAllPubMethod(0), fClassMenuList(0),
1123 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1124 fInstanceCount(0), fOnHeap(0),
1125 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1126 fTypeInfo(0), fShowMembers(0),
1127 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1128 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1129 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1130 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1133 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1134 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1137 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1147 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1148 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1149 fAllPubMethod(0), fClassMenuList(0),
1150 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1151 fInstanceCount(0), fOnHeap(0),
1152 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1153 fTypeInfo(0), fShowMembers(0),
1154 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1155 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1156 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1157 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1160 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1161 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1173 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1174 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1191 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1192 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1193 fAllPubMethod(0), fClassMenuList(0),
1194 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1195 fInstanceCount(0), fOnHeap(0),
1196 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1197 fTypeInfo(0), fShowMembers(0),
1198 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1199 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1200 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1201 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1204 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1205 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1210 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1216 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1218 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1225 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1241 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1242 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1243 fAllPubMethod(0), fClassMenuList(0),
1244 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1245 fInstanceCount(0), fOnHeap(0),
1246 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1247 fTypeInfo(0), fShowMembers(0),
1248 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1249 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1250 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1251 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1254 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1255 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1258 Init(name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1267 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1271 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1272 fBase(0), fData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1275 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1276 fInstanceCount(0), fOnHeap(0),
1277 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1278 fTypeInfo(0), fShowMembers(0),
1279 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1280 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1281 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1282 fCanSplit(-1), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1284 fState(kHasTClassInit),
1285 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1286 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1290 Init(name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1308 info->
Clear(
"build");
1324 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1325 ClassInfo_t *givenInfo,
1329 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1332 fName = TClassEdit::ShortType(name, TClassEdit::kDropStlDefault).c_str();
1361 TClass **persistentRef = 0;
1379 info->
Clear(
"build");
1398 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1406 if (!TClassEdit::IsSTLCont(
fName.Data())) {
1457 !TClassEdit::IsInterpreterDetail(
fName.Data()) ) {
1459 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass initialization routine.",
fName.Data());
1463 ::Warning(
"TClass::Init",
"no dictionary for class %s is available",
fName.Data());
1474 TString resolvedThis;
1475 if (!givenInfo && strchr (name,
'<')) {
1476 if (
fName != name) {
1486 resolvedThis = TClassEdit::ResolveTypedef (name,
kTRUE);
1487 if (resolvedThis != name) {
1511 if (resolvedThis !=
fName) {
1512 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(resolvedThis);
1513 if (oldcl && oldcl !=
this) {
1519 while (
TNameMapNode* htmp = static_cast<TNameMapNode*> (next()) ) {
1520 if (resolvedThis != htmp->String())
continue;
1521 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(htmp->fOrigName);
1522 if (oldcl && oldcl !=
this) {
1540 if (persistentRef) {
1547 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1558 }
else if (!silent) {
1559 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1565 }
else if (!strncmp(
GetName(),
"std::pair<",10) || !strncmp(
GetName(),
"pair<",5) ) {
1582 TString resolvedThis = TClassEdit::ResolveTypedef (
GetName(),
kTRUE);
1584 while (
TNameMapNode* htmp = static_cast<TNameMapNode*> (next()) ) {
1585 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1652 std::map<std::string, TObjArray*>::iterator it;
1653 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1654 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1664 Int_t ReadRulesContent(FILE *
f)
1676 while ((c = fgetc(f)) != EOF) {
1682 if (rule.Length() > 0) {
1734 static const char *suffix =
"class.rules";
1735 TString
sname = suffix;
1740 FILE * f = fopen(sname,
"r");
1742 res = ReadRulesContent(f);
1745 ::Error(
"TClass::ReadRules()",
"Cannot find rules file %s", sname.Data());
1758 if (!filename || !filename[0]) {
1759 ::Error(
"TClass::ReadRules",
"no file name specified");
1763 FILE * f = fopen(filename,
"r");
1765 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1768 Int_t count = ReadRulesContent(f);
1821 ::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).",
1882 TAutoInspector insp(b);
1883 obj->ShowMembers(insp);
1904 }
else if (actual !=
this) {
1905 return actual->
Browse(obj, b);
1911 TAutoInspector insp(b);
1954 isTransient =
kTRUE;
1959 TMmallocDescTemp setreset;
1970 static TClassRef clRefString(
"std::string");
1971 if (clRefString ==
this) {
1979 && TClassEdit::IsStdClass(
GetName())
1980 && strncmp(
GetName(),
"pair<", 5) != 0) {
1981 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
1987 TBuildRealData brd(pointer,
this);
1993 if ( isTransient ) {
2001 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2036 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2045 Long_t eoffset = element->GetOffset();
2046 TClass *cle = element->GetClassPointer();
2055 TString rdname; rdname.Form(
"%s%s",name,element->GetFullName());
2060 rdname.Form(
"%s%s.",name,element->GetFullName());
2064 TString rdname; rdname.Form(
"%s%s",name,element->GetFullName());
2078 Int_t etype = element->GetType();
2081 Long_t eoffset = element->GetOffset();
2082 TClass *cle = element->GetClassPointer();
2102 TMmallocDescTemp setreset;
2129 if (strcmp(
GetName(),
"string") == 0) {
2137 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2141 sinfo->CallShowMembers(obj, insp, isTransient);
2156 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2190 TClass *clbase = element->GetClassPointer();
2264 static TClassRef stdStringClass(
"std::string");
2271 if ((stl==ROOT::kSTLmap || stl==ROOT::kSTLmultimap)
2329 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2330 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2360 copy->
fName = new_name;
2415 if (!padsav || !opt.Contains(
"same")) {
2418 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2424 if (
gPad)
gPad->DrawClassObject(
this,option);
2426 if (padsav) padsav->
cd();
2467 if (
sizeof(
this) == 4)
2470 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2473 if (
sizeof(
this) == 4)
2474 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2476 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2479 TDumpMembers dm(noAddr);
2481 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2492 static char name[maxsize+2];
2494 UInt_t nch = strlen(text);
2496 for (
UInt_t i = 0; i < nch && icur <
maxsize; ++i, ++icur) {
2497 if (text[i] ==
'\"' || text[i] ==
'[' || text[i] ==
'~' ||
2498 text[i] ==
']' || text[i] ==
'&' || text[i] ==
'#' ||
2499 text[i] ==
'!' || text[i] ==
'^' || text[i] ==
'<' ||
2500 text[i] ==
'?' || text[i] ==
'>') {
2504 name[icur] = text[i];
2530 if (
object==0)
return (
TClass*)
this;
2532 return (*
fIsA)(object);
2543 return realTObject->IsA();
2560 return (*
fIsA)(object);
2578 if (strcmp(
GetName(), classname) == 0)
return this;
2597 if (cl ==
this)
return this;
2609 if (cl == c)
return c;
2628 if (cl ==
this)
return 0;
2630 if (!
fBase.load()) {
2637 if (!sinfo)
return -1;
2643 for(
Int_t i=0; i<size; i++) {
2649 if (!baseclass)
return -1;
2651 if (subOffset == -2)
return -2;
2652 if (subOffset != -1)
return offset+subOffset;
2653 offset += baseclass->
Size();
2657 if (!baseclass)
return -1;
2659 if (subOffset == -2)
return -2;
2660 if (subOffset != -1)
return offset+subOffset;
2661 offset += baseclass->
Size();
2664 Error(
"GetBaseClassOffsetRecurse",
"Unexpected element type for base class: %s\n",element->IsA()->
GetName());
2677 else lnk =
fBase.load()->FirstLink();
2694 if (off == -2)
return -2;
2713 if (
this == toBase)
return 0;
2729 if(derived && base) {
2750 if (dm)
return this;
2759 if (cdm)
return cdm;
2770 struct TClassLocalStorage {
2771 TClassLocalStorage() : fCollectionProxy(0), fStreamer(0) {};
2776 static TClassLocalStorage *GetStorage(
const TClass *cl)
2782 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2789 local = (
ULong_t)
new TClassLocalStorage();
2792 return (TClassLocalStorage*)local;
2807 return ROOT::kNotSTL;
2820 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2823 return local->fCollectionProxy;
2834 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2836 if (local->fStreamer==0) {
2838 const std::type_info &orig = (
typeid(*fStreamer) );
2839 if (!local->fStreamer) {
2840 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2842 const std::type_info © = (
typeid(*local->fStreamer) );
2843 if (strcmp(orig.name(),copy.name())!=0) {
2844 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2848 return local->fStreamer;
2887 if (!name || !name[0])
return 0;
2889 if (strstr(name,
"(anonymous)"))
return 0;
2890 if (strncmp(name,
"class ",6)==0) name += 6;
2891 if (strncmp(name,
"struct ",7)==0) name += 7;
2895 if (!
gROOT->GetListOfClasses())
return 0;
2930 if (!cl && !load)
return 0;
2932 TClass *loadedcl = (dict)();
2942 std::string normalizedName;
2947 TClassEdit::GetNormalizedName(normalizedName, name);
2950 if (normalizedName != name) {
2951 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(normalizedName.c_str());
2962 normalizedName = cl->
GetName();
2963 checkTable = load && (normalizedName !=
name);
2966 if (!load)
return 0;
2992 if (
TDataType* theDataType =
gROOT->GetType(normalizedName.c_str())){
2994 auto underlyingTypeName = theDataType->GetTypeName();
2997 if (underlyingTypeDict){
2998 loadedcl = underlyingTypeDict();
3004 if (loadedcl)
return loadedcl;
3008 if (loadedcl)
return loadedcl;
3014 if (TClassEdit::IsSTLCont( normalizedName.c_str() )) {
3021 std::string::size_type posLess = normalizedName.find(
'<');
3022 if (posLess != std::string::npos) {
3029 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());
3031 if (normalizedName.length() &&
3035 std::string alternative;
3037 const char *altname = alternative.c_str();
3038 if ( strncmp(altname,
"std::",5)==0 ) {
3043 if (altname != normalizedName && strcmp(altname,name) != 0) {
3071 if (!
gROOT->GetListOfClasses())
return 0;
3092 if (!load)
return 0;
3102 TIter next(
gROOT->GetListOfClassGenerators());
3114 if (!autoload_old) {
3146 if (!
gROOT->GetListOfClasses())
return 0;
3154 if (cl->IsLoaded())
return cl;
3161 if (!load)
return 0;
3164 if (cl) loadedcl =
gROOT->LoadClass(cl->GetName(),silent);
3165 else loadedcl =
gROOT->LoadClass(name,silent);
3167 if (loadedcl)
return loadedcl;
3192 if (!
gROOT->GetListOfClasses())
return 0;
3196 DeclIdMap_t::equal_range iter = map->Find(
id);
3197 if (iter.first == iter.second)
return false;
3198 std::vector<TClass*>::iterator vectIt = classes.begin();
3199 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3200 vectIt = classes.insert(vectIt, it->second);
3228 || datamember == 0)
return 0;
3231 const char *start_name = datamember;
3232 while (*start_name ==
'*') ++start_name;
3237 if (
const char *s = strchr(start_name,
'[')){
3238 UInt_t len = s-start_name;
3239 TString
name(start_name,len);
3257 if (strchr(name,
'[')==0) {
3299 std::string givenName(name);
3302 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3303 if (firstBracket != std::string::npos) {
3305 std::string nameNoDim(givenName.substr(0, firstBracket));
3308 TObject* obj = lnk->GetObject();
3309 std::string objName(obj->
GetName());
3310 std::string::size_type pos = objName.find_first_of(
"[");
3312 if (pos != std::string::npos) {
3314 if (objName == nameNoDim) {
3323 std::ostringstream ptrname;
3324 ptrname <<
"*" << givenName;
3331 std::string::size_type firstDot = givenName.find_first_of(
".");
3332 if (firstDot == std::string::npos) {
3343 std::string::size_type lastDot = givenName.find_last_of(
".");
3344 std::ostringstream starname;
3345 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3353 std::string firstDotName(givenName.substr(firstDot + 1));
3367 std::string::size_type firstDotBracket = firstDotName.find_first_of(
"[");
3368 if (firstDotBracket != std::string::npos) {
3370 std::string nameNoDim(firstDotName.substr(0, firstDotBracket));
3373 TObject* obj = lnk->GetObject();
3374 std::string objName(obj->
GetName());
3375 std::string::size_type pos = objName.find_first_of(
"[");
3377 if (pos != std::string::npos) {
3379 if (objName == nameNoDim) {
3392 ptrname <<
"*" << firstDotName;
3408 std::string::size_type bracket = starname.str().find_first_of(
"[");
3409 if (bracket == std::string::npos) {
3479 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3508 auto temp =
fEnums.load();
3510 if (requestListLoading) {
3525 if (!requestListLoading) {
3532 static bool fromRootCling = dlsym(RTLD_DEFAULT,
"usedToIdentifyRootClingByDlSym");
3617 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3650 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3680 while ((baseClass = (
TBaseClass *) nextBase())) {
3688 while ((method = (
TMethod*)next())) {
3719 return cl->IsLoaded();
3733 TClass* baseCl = base->Class();
3747 TIter nextMemb(ldm);
3777 for (
int i = 0; i < 2; i++) {
3793 if (
this == sCIString)
return;
3796 if (strncmp(
fName,
"pair<", 5) == 0) {
3844 if (
this == sCIString)
return;
3848 if (strncmp(
fName,
"pair<", 5) == 0) {
3903 while ((acl = (
TClass*)nextClass())) {
3904 if (acl == newcl)
continue;
3906 TIter nextInfo(acl->GetStreamerInfos());
3909 info->
Update(
this, newcl);
3912 if (acl->GetCollectionProxy()) {
3913 acl->GetCollectionProxy()->UpdateValueClass(
this, newcl);
3918 TIter delIter( &tobedeleted );
3919 while ((acl = (
TClass*)delIter())) {
3932 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
3983 (*fMethod).Unload();
4017 if (options==0 || options[0]==0)
return;
4019 if (strstr(options,
"streamerinfo")!=0) {
4023 std::map<std::string, TObjArray*>::iterator it;
4024 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
4025 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
4026 it->second->ls(options);
4053 TIter next(methodList);
4055 while ((method = (
TMethod*) next())) {
4057 if (classPtr != method->
GetClass()) {
4065 TIter nextarg(margsList);
4066 while ((methodArg = (
TMethodArg*)nextarg())) {
4069 if (sig.Length()!=0) sig.Remove(0,1);
4116 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4174 Fatal(
"GetMethod",
"gInterpreter not initialized");
4180 if (!decl)
return 0;
4187 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4188 method,params,objectIsConst ?
"const " :
"",
GetName());
4224 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4228 objectIsConst, mode);
4230 if (!decl)
return 0;
4233 Error(
"GetMethodWithPrototype",
4234 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4235 method,proto,objectIsConst ?
"const " :
"",
GetName());
4249 while ((m = (
TMethod *) next())) {
4269 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4275 if (!decl)
return 0;
4295 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4302 if (!decl)
return 0;
4378 if ((version < -1) || (version >= ninfos)) {
4379 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4395 TMmallocDescTemp setreset;
4447 newname +=
"@@emulated";
4470 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4483 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4507 newname +=
"@@emulated";
4521 if (!sinfo && (checksum !=
fCheckSum)) {
4530 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i) {
4543 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4589 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4615 if (cl ==
this)
return kTRUE;
4624 TClass *clbase = element->GetClassPointer();
4625 if (!clbase)
return kFALSE;
4632 if (((
TClass *)
this)->GetBaseClass(cl))
return kTRUE;
4644 if (cl ==
this)
return obj;
4651 return (
void*)((
Long_t)obj+off);
4653 return (
void*)((
Long_t)obj-off);
4719 Error(
"New",
"cannot create object of class %s",
GetName());
4735 Error(
"New",
"cannot create object of class %s",
GetName());
4746 Error(
"New",
"cannot create object of class %s",
GetName());
4767 if (!sinfo && !quiet) {
4786 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
4789 Fatal(
"New",
"This cannot happen!");
4813 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4828 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4856 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
4861 p = sinfo->
New(arena);
4875 Error(
"New with placement",
"This cannot happen!");
4962 Error(
"NewArray",
"This cannot happen!");
4986 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5001 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5029 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5034 p = sinfo->
NewArray(nElements, arena);
5053 Error(
"NewArray with placement",
"This cannot happen!");
5065 if (obj == 0)
return;
5072 }
else if ((!dtorOnly) &&
fDelete) {
5104 std::multiset<Version_t> knownVersions;
5117 knownVersions.insert(ver);
5125 if (!inRepo || verFound) {
5132 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5138 Error(
"Destructor",
"Doing Dump() ...");
5153 Error(
"Destructor2",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5160 Error(
"Destructor2",
"Doing Dump() ...");
5168 if (inRepo && verFound && p) {
5172 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5182 if (ary == 0)
return;
5189 Error(
"DeleteArray",
"Destructor only is not supported!");
5218 std::multiset<Version_t> knownVersions;
5229 knownVersions.insert(ver);
5237 if (!inRepo || verFound) {
5244 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5250 Error(
"DeleteArray",
"Doing Dump() ...");
5259 Error(
"DeleteArray",
"Loaded class version %d is not registered for addr %p",
fClassVersion, p);
5268 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5275 Error(
"DeleteArray",
"Doing Dump() ...");
5286 if (inRepo && verFound && p) {
5290 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5366 while (strlen(s) == (maxsize - 1)) {
5377 ::Error(
"TClass::Load",
"dictionary of class %s not found", s);
5401 if (result)
return result;
5449 TIter next(
gROOT->GetListOfClassGenerators());
5485 ::Error(
"TClass::LoadClassInfo",
5486 "no interpreter information for class %s is available even though it has a TClass initialization routine.",
5507 const char *dfil,
const char *ifil,
5512 TMmallocDescTemp setreset;
5513 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5521 const char *dfil,
const char *ifil,
5526 TMmallocDescTemp setreset;
5527 return new TClass(cname,
id, dfil, ifil, dl, il);
5631 The class %s transitioned from not having a specified class version\n\
5632 to having a specified class version (the current class version is %d).\n\
5633 However too many different non-versioned layouts of the class have\n\
5634 already been loaded so far. To work around this problem you can\n\
5635 load fewer 'old' file in the same ROOT session or load the C++ library\n\
5636 describing the class %s before opening the files or increase the version\n\
5637 number of the class for example ClassDef(%s,%d).\n\
5638 Do not try to write objects with the current class definition,\n\
5639 the files might not be readable.\n",
5643 The StreamerInfo version %d for the class %s which was read\n\
5644 from a file previously opened has the same version as the active class\n\
5645 but a different checksum. You should update the version to ClassDef(%s,%d).\n\
5646 Do not try to write objects with the current class definition,\n\
5647 the files will not be readable.\n"
5692 TMmallocDescTemp setreset;
5880 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
5905 (*fMethod).Unload();
5914 if (fState <= kForwardDeclared && fStreamerInfo->GetEntries() != 0) {
6007 //info is empty. Let's build the default Streamer descriptor
6009 char *temp = new char[10000];
6013 //add list of base classes
6014 TIter nextb(GetListOfBases());
6016 while ((base = (TBaseClass*) nextb())) {
6017 snprintf(local,100,"%s;",base->GetName());
6018 strlcat(temp,local,10000);
6021 //add list of data members and types
6022 TIter nextd(GetListOfDataMembers());
6023 while ((dm = (TDataMember *) nextd())) {
6024 if (dm->IsEnum()) continue;
6025 if (!dm->IsPersistent()) continue;
6026 Long_t property = dm->Property();
6027 if (property & kIsStatic) continue;
6028 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
6031 if (acl->GetClassVersion() == 0) continue;
6034 // dm->GetArrayIndex() returns an empty string if it does not
6036 const char * index = dm->GetArrayIndex();
6037 if (strlen(index)==0)
6038 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
6040 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
6041 strlcat(temp,local,10000);
6043 //fStreamerInfo = temp;
6132 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6137 TIter nextBase(tlb);
6142 Bool_t isSTL = TClassEdit::IsSTLCont(name);
6144 name = TClassEdit::ShortType( name, TClassEdit::kDropStlDefault );
6146 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6149 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6158 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6160 TIter nextMemb(tlm);
6170 if ( prop&kIsStatic)
continue;
6171 name = tdm->
GetName(); il = name.Length();
6176 for (i=0; i<il; i++)
id =
id*3+name[i];
6188 type.ReplaceAll(
"ULong64_t",
"unsigned long long");
6189 type.ReplaceAll(
"Long64_t",
"long long");
6190 type.ReplaceAll(
"<signed char",
"<char");
6191 type.ReplaceAll(
",signed char",
",char");
6192 if (type==
"signed char") type =
"char";
6204 for (i=0; i<il; i++)
id =
id*3+type[i];
6207 if (prop&kIsArray) {
6208 for (
int ii=0;ii<dim;ii++)
id =
id*3+tdm->
GetMaxIndex(ii);
6215 left = strstr(tdm->
GetTitle(),
"[");
6217 const char *right = strstr(left,
"]");
6220 while (left != right) {
6346 streamer->
Stream(b,
object,onfile_class);
6436 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
6598 for (
Int_t i=-1;i<ninfos;++i) {
6620 for (
Int_t i=-1;i<ninfos;i++) {
6624 if (!info)
continue;
6665 std::map<std::string, TObjArray*>::iterator it;
6668 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6670 if( it != (*fConversionStreamerInfo).end() ) {
6674 if( arr && version > -1 && version < arr->GetSize() && arr->
At( version ) )
6686 if( version >= -1 && version < clSI->GetSize() )
6724 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6763 std::map<std::string, TObjArray*>::iterator it;
6767 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6769 if( it != (*fConversionStreamerInfo).end() ) {
6818 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6837 Error(
"RegisterStreamerInfo",
6838 "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
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
void *(* NewArrFunc_t)(Long_t size, void *arena)
virtual Int_t GetProperties() const
ROOT::MergeFunc_t GetMerge() const
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.
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
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
Int_t GetNmethods()
Return the number of methods of this class Note that in case the list of methods is not yet created...
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
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
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...
R__EXTERN TVirtualMutex * gInterpreterMutex
void ls(Option_t *opt="") const
The ls function lists the contents of a class on stdout.
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
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)
Set the name of the TNamed.
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.
void(* DirAutoAdd_t)(void *, TDirectory *)
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...
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
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: ~~~ {.cpp}.
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.
TFunction * Get(DeclId_t id)
Return (after creating it if necessary) the TMethod or TFunction describing the function correspondin...
void *(* NewFunc_t)(void *)
Int_t GetEntriesFast() const
virtual void Stream(TBuffer &b, void *objp, const TClass *onfileClass)
void(* DelArrFunc_t)(void *)
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.
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*".
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.
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...
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*".
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
void Init(const char *name, Version_t cversion, const std::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.
static DeclIdMap_t * GetDeclIdMap()
R__EXTERN void * gMmallocDesc
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
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.
ROOT::NewArrFunc_t GetNewArray() const
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
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.
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
~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.
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.
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 MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
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 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.
void(* DesFunc_t)(void *)
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
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
TClass * CreateClass(const char *cname, Version_t id, const std::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).
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.
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).
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...
#define R__LOCKGUARD2(mutex)
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
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
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.
virtual Long_t DataMemberInfo_Property(DataMemberInfo_t *) const
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
const std::type_info * fTypeInfo
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)
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
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
void Add(THist< DIMENSIONS, PRECISION_TO, STAT_TO...> &to, const THist< DIMENSIONS, PRECISION_FROM, STAT_FROM...> &from)
Add two histograms.
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(* DelFunc_t)(void *)
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*".
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
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Each ROOT class (see TClass) has a linked list of methods.
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
TObject * FindObject(const char *name) const
Find object using its name.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
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.
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
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="")
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.
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.
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.