107#define RTLD_DEFAULT ((void *)::GetModuleHandle(NULL))
108#define dlsym(library, function_name) ::GetProcAddress((HMODULE)library, function_name)
134 static constexpr const char kUndeterminedClassInfoName[] =
"<NOT YET DETERMINED FROM fClassInfo>";
136 class TMmallocDescTemp {
140 TMmallocDescTemp(
void *value = 0) :
161 TNameMapNode(
const char *typedf,
const char *orig) :
174 const static bool foundSymbol = dlsym(RTLD_DEFAULT,
"usedToIdentifyRootClingByDlSym");
197 auto strLen = strlen(
name);
198 if (strLen == 0)
return;
200 const char* endCharPtr = strchr(
name,
'<');
201 endCharPtr = !endCharPtr ? &
name[strLen] : endCharPtr;
203 const char* beginCharPtr = endCharPtr;
204 while (beginCharPtr!=
name){
205 if (*beginCharPtr==
':'){
211 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
212 std::string
s(beginCharPtr, endCharPtr);
214 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n",
s.c_str(),
name);
216 fClassNamesSet.insert(
s);
226 found = fClassNamesSet.find(
name) != fClassNamesSet.end();
235 if (fVerbLevel > 1) {
236 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",
237 (
long unsigned int)fClassNamesSet.size());
238 for (
auto const & key: fClassNamesSet) {
239 printf(
" - %s\n", key.c_str());
270struct TClass__GetCallingNewRAII
277 fOldValue(fCurrentValue)
279 fCurrentValue = newvalue;
282 ~TClass__GetCallingNewRAII()
284 fCurrentValue = fOldValue;
304 std::pair<RepoCont_t::iterator, Bool_t> tmp =
fObjectVersionRepository.insert(RepoCont_t::value_type>(location, version));
306 Warning(where,
"Reregistering an object of class '%s' version %d at address %p",
what->GetName(), version, p);
310 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p",
what->GetName(), version, location);
323 RepoCont_t::iterator tmp = cur++;
324 if ((tmp->first == location) && (tmp->second ==
what->GetClassVersion())) {
340 size_t objsize =
what->Size();
341 long delta = (
char*)newadd - (
char*)oldadd;
345 RepoCont_t::iterator tmp = cur++;
346 if (oldadd <= tmp->
first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
362#define R__USE_STD_MAP
363 class TMapTypeToTClass {
364#if defined R__USE_STD_MAP
368 typedef std::map<std::string,TClass*>
IdMap_t;
369 typedef IdMap_t::key_type key_type;
370 typedef IdMap_t::const_iterator const_iterator;
371 typedef IdMap_t::size_type size_type;
374 typedef TClass* mapped_type;
376 typedef IdMap_t::mapped_type mapped_type;
383 void Add(
const key_type &key, mapped_type &obj)
388 mapped_type
Find(
const key_type &key)
const
391 IdMap_t::const_iterator iter = fMap.find(key);
393 if (iter != fMap.end()) cl = iter->second;
396 void Remove(
const key_type &key) {
405#ifdef R__COMPLETE_MEM_TERMINATION
414 void Add(
const char *key,
TClass *&obj) {
416 fMap.Add(realkey, obj);
419 const TPair *
a = (
const TPair *)fMap.FindObject(key);
423 void Remove(
const char *key) {
425 TObject *actual = fMap.Remove(&realkey);
431 class TMapDeclIdToTClass {
434 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
435 typedef DeclIdMap_t::key_type key_type;
436 typedef DeclIdMap_t::mapped_type mapped_type;
437 typedef DeclIdMap_t::const_iterator const_iterator;
438 typedef std::pair <const_iterator, const_iterator> equal_range;
439 typedef DeclIdMap_t::size_type size_type;
445 void Add(
const key_type &key, mapped_type obj)
448 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
451 size_type CountElementsWithKey(
const key_type &key)
453 return fMap.count(key);
455 equal_range
Find(
const key_type &key)
const
458 return fMap.equal_range(key);
460 void Remove(
const key_type &key) {
469#ifdef R__COMPLETE_MEM_TERMINATION
471 return &gIdMapObject;
480#ifdef R__COMPLETE_MEM_TERMINATION
482 return &gDeclIdMapObject;
497 gROOT->GetListOfClasses()->Add(cl);
511 if (!cl || !
id)
return;
523 gROOT->GetListOfClasses()->Remove(oldcl);
555 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
572void TDumpMembers::Inspect(
TClass *cl,
const char *pname,
const char *mname,
const void *add,
Bool_t )
574 const Int_t kvalue = 30;
576 const Int_t ktitle = 50;
578 const Int_t ktitle = 42;
580 const Int_t kline = 1024;
588 const char *memberName;
589 const char *memberFullTypeName;
590 const char *memberTitle;
595 if (member->GetDataType()) {
596 memberDataType = (
EDataType)member->GetDataType()->GetType();
598 memberName = member->GetName();
599 memberFullTypeName = member->GetFullTypeName();
600 memberTitle = member->GetTitle();
601 isapointer = member->IsaPointer();
602 isbasic = member->IsBasic();
609 const char *cursor = mname;
610 while ( (*cursor)==
'*' ) ++cursor;
612 Ssiz_t pos = elname.Index(
"[");
613 if ( pos !=
kNPOS ) {
614 elname.Remove( pos );
617 if (!element)
return;
622 memberName = element->
GetName();
625 membertype =
gROOT->GetType(memberFullTypeName);
627 isbasic = membertype !=0;
634 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
638 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
643 static TClassRef stdClass(
"std::string");
644 Bool_t isStdString = (dataClass == stdClass);
647 for (i = 0;i < kline; i++)
line[i] =
' ';
653 char *pointer = (
char*)add;
654 char **ppointer = (
char**)(pointer);
657 char **p3pointer = (
char**)(*ppointer);
664 }
else if (membertype) {
666 i = strlen(*ppointer);
667 if (kvalue+i > kline) i=kline-1-kvalue;
669 for (
Int_t j = 0; j < i; j++) {
670 if (!std::isprint((*ppointer)[j])) {
676 strncpy(
line + kvalue, *ppointer, i);
684 }
else if (!strcmp(memberFullTypeName,
"char*") ||
685 !strcmp(memberFullTypeName,
"const char*")) {
686 i = strlen(*ppointer);
687 if (kvalue+i >= kline) i=kline-1-kvalue;
689 for (
Int_t j = 0; j < i; j++) {
690 if (!std::isprint((*ppointer)[j])) {
696 strncpy(
line + kvalue, *ppointer, std::min( i, kline - kvalue));
706 }
else if (membertype) {
708 cdatime = (
UInt_t*)pointer;
710 snprintf(&
line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
718 std::string *str = (std::string*)pointer;
720 }
else if (isTString) {
730 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
731 i = strlen(&
line[0]);
line[i] =
' ';
732 assert(250 > ktitle);
733 strlcpy(&
line[ktitle],memberTitle,250-ktitle+1);
745 void *fRealDataObject;
749 TBuildRealData(
void *obj,
TClass *cl) {
751 fRealDataObject = obj;
762void TBuildRealData::Inspect(
TClass* cl,
const char* pname,
const char* mname,
const void* add,
Bool_t isTransient)
774 isTransientMember =
kTRUE;
781 if (cl != fRealDataClass) {
782 if (!fRealDataClass->InheritsFrom(cl)) {
783 Ssiz_t dot = rname.Index(
'.');
788 if (!fRealDataClass->GetDataMember(rname)) {
803 if (!fRealDataClass->GetBaseDataMember(rname)) {
818 fRealDataClass->GetListOfRealData()->Add(rd);
828 fRealDataClass->GetListOfRealData()->Add(rd);
873 void* addrForRecursion = 0;
874 if (GetObjectValidity() == kValidObjectGiven)
875 addrForRecursion =
const_cast<void*
>(add);
882 fRealDataClass->GetListOfRealData()->Add(rd);
899 fBrowser =
b; fCount = 0; }
900 virtual ~TAutoInspector() { }
903 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
909void TAutoInspector::Inspect(
TClass *cl,
const char *tit,
const char *
name,
910 const void *addr,
Bool_t )
912 if(tit && strchr(tit,
'.')) return ;
913 if (fCount && !fBrowser)
return;
920 int ln = strcspn(
name,
"[ ");
924 if (!classInfo)
return;
934 if ((found = (iname==mname)))
break;
946 if (mname ==
"G__virtualinfo")
return;
948 int size =
sizeof(
void*);
968 for(
int i=0; i<nmax; i++) {
970 char *ptr = (
char*)addr + i*size;
977 if (!fBrowser)
return;
985 bwname = actualClass->
GetName();
994 int l = strcspn(bwname.
Data(),
"[ ");
995 if (
l<bwname.
Length() && bwname[
l]==
'[') {
996 char cbuf[13];
snprintf(cbuf,13,
"[%02d]",i);
999 bwname = (
const char*)ts;
1005 fBrowser->Add(obj,clm,bwname);
1012 fBrowser->Add( obj, clm, bwname );
1018 int sz = proxy->
Size();
1020 char fmt[] = {
"#%09d"};
1021 fmt[3] =
'0'+(
int)
log10(
double(sz))+1;
1023 for (
int ii=0;ii<sz;ii++) {
1024 void *p = proxy->
At(ii);
1036 fBrowser->Add( p, actualCl, ts );
1075 TMmallocDescTemp setreset;
1092 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1093 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1094 fAllPubMethod(0), fClassMenuList(0),
1095 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1096 fInstanceCount(0), fOnHeap(0),
1097 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1098 fTypeInfo(0), fShowMembers(0),
1099 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1100 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1101 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1102 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1103 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1105 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1106 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1111 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1114 TMmallocDescTemp setreset;
1121 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1125 ::Warning(
"TClass::TClass",
"no dictionary for class %s is available",
name);
1139 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1140 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1141 fAllPubMethod(0), fClassMenuList(0),
1142 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1143 fInstanceCount(0), fOnHeap(0),
1144 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1145 fTypeInfo(0), fShowMembers(0),
1146 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1147 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1148 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1149 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1150 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1152 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1153 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1156 Init(
name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1166 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1167 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1168 fAllPubMethod(0), fClassMenuList(0),
1169 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1170 fInstanceCount(0), fOnHeap(0),
1171 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1172 fTypeInfo(0), fShowMembers(0),
1173 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1174 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1175 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1176 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1177 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1179 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1180 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1192 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1193 Init(
name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1210 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1211 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1212 fAllPubMethod(0), fClassMenuList(0),
1213 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1214 fInstanceCount(0), fOnHeap(0),
1215 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1216 fTypeInfo(0), fShowMembers(0),
1217 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1218 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1219 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1220 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1221 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1223 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1224 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1229 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1235 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1237 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1244 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1260 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1261 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1262 fAllPubMethod(0), fClassMenuList(0),
1263 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1264 fInstanceCount(0), fOnHeap(0),
1265 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1266 fTypeInfo(0), fShowMembers(0),
1267 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1268 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1269 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1270 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1271 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1273 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1274 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1277 Init(
name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1286 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1290 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1291 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1294 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1295 fInstanceCount(0), fOnHeap(0),
1296 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1297 fTypeInfo(0), fShowMembers(0),
1298 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1299 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1300 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1301 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1302 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1303 fState(kHasTClassInit),
1304 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1305 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1309 Init(
name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1327 info->
Clear(
"build");
1351 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1352 ClassInfo_t *givenInfo,
1356 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1358 ::Error(
"TClass::Init",
"The name parameter is invalid (null or empty)");
1399 TClass **persistentRef = 0;
1417 info->
Clear(
"build");
1435 (*fMethod).fClass =
this;
1447 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1450 bool invalid = !
gInterpreter->ClassInfo_IsValid(givenInfo);
1451 bool notloaded = !
gInterpreter->ClassInfo_IsLoaded(givenInfo);
1452 auto property =
gInterpreter->ClassInfo_Property(givenInfo);
1454 if (invalid || (notloaded && (property &
kIsNamespace)) ||
1494 proto->FillTClass(
this);
1520 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass "
1521 "initialization routine.",
1539 if (!givenInfo && strchr (
name,
'<')) {
1551 if (resolvedThis !=
name) {
1575 if (resolvedThis !=
fName) {
1576 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(resolvedThis);
1577 if (oldcl && oldcl !=
this) {
1583 while ( TNameMapNode* htmp =
static_cast<TNameMapNode*
> (next()) ) {
1584 if (resolvedThis != htmp->String())
continue;
1585 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(htmp->fOrigName);
1586 if (oldcl && oldcl !=
this) {
1604 if (persistentRef) {
1611 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1622 }
else if (!silent) {
1623 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1648 while ( TNameMapNode* htmp =
static_cast<TNameMapNode*
> (next()) ) {
1649 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1675 (*fUsingData).Delete();
1720 std::map<std::string, TObjArray*>::iterator it;
1721 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1722 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1732 Int_t ReadRulesContent(FILE *
f)
1744 while ((
c = fgetc(
f)) != EOF) {
1750 if (rule.Length() > 0) {
1802 static const char *suffix =
"class.rules";
1808 FILE *
f = fopen(sname,
"r");
1810 res = ReadRulesContent(
f);
1813 ::Error(
"TClass::ReadRules()",
"Cannot find rules file %s", sname.
Data());
1826 if (!filename || !filename[0]) {
1827 ::Error(
"TClass::ReadRules",
"no file name specified");
1831 FILE *
f = fopen(filename,
"r");
1833 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1836 Int_t count = ReadRulesContent(
f);
1889 ::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).",
1950 TAutoInspector insp(
b);
1951 obj->ShowMembers(insp);
1972 }
else if (actual !=
this) {
1973 return actual->
Browse(obj,
b);
1979 TAutoInspector insp(
b);
2022 isTransient =
kTRUE;
2027 TMmallocDescTemp setreset;
2038 static TClassRef clRefString(
"std::string");
2039 if (clRefString ==
this) {
2049 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
2055 TBuildRealData brd(pointer,
this);
2061 if ( isTransient ) {
2069 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2084 c->BuildRealData(0, isTransient);
2104 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2170 TMmallocDescTemp setreset;
2197 if (strcmp(
GetName(),
"string") == 0) {
2205 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2209 sinfo->CallShowMembers(obj, insp, isTransient);
2224 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2288 }
else if (!
c->CanSplitBaseAllow()) {
2332 static TClassRef stdStringClass(
"std::string");
2389 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2390 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2420 copy->
fName = new_name;
2475 if (!padsav || !opt.
Contains(
"same")) {
2478 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2484 if (
gPad)
gPad->DrawClassObject(
this,option);
2486 if (padsav) padsav->
cd();
2527 if (
sizeof(
this) == 4)
2530 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2533 if (
sizeof(
this) == 4)
2534 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2536 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2539 TDumpMembers dm(noAddr);
2541 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2551 static const UInt_t maxsize = 255;
2552 static char name[maxsize+2];
2556 for (
UInt_t i = 0; i < nch && icur < maxsize; ++i, ++icur) {
2557 if (
text[i] ==
'\"' ||
text[i] ==
'[' ||
text[i] ==
'~' ||
2560 text[i] ==
'?' ||
text[i] ==
'>') {
2590 if (
object==0)
return (
TClass*)
this;
2603 return realTObject->IsA();
2638 if (strcmp(
GetName(), classname) == 0)
return this;
2657 if (cl ==
this)
return this;
2669 if (cl ==
c)
return c;
2670 c1 =
c->GetBaseClass(cl);
2688 if (cl ==
this)
return 0;
2690 if (!
fBase.load()) {
2697 if (!sinfo)
return -1;
2703 for(
Int_t i=0; i<size; i++) {
2709 if (!baseclass)
return -1;
2711 if (subOffset == -2)
return -2;
2712 if (subOffset != -1)
return offset+subOffset;
2713 offset += baseclass->
Size();
2717 if (!baseclass)
return -1;
2719 if (subOffset == -2)
return -2;
2720 if (subOffset != -1)
return offset+subOffset;
2721 offset += baseclass->
Size();
2724 Error(
"GetBaseClassOffsetRecurse",
"Unexpected element type for base class: %s\n",element->IsA()->
GetName());
2736 if (
fBase.load() == 0)
2739 lnk =
fBase.load()->FirstLink();
2755 off =
c->GetBaseClassOffsetRecurse(cl);
2756 if (off == -2)
return -2;
2775 if (
this == toBase)
return 0;
2791 if(derived && base) {
2813 if (dm)
return this;
2821 TClass *cdm =
c->GetBaseDataMember(datamember);
2822 if (cdm)
return cdm;
2833 struct TClassLocalStorage {
2834 TClassLocalStorage() : fCollectionProxy(0), fStreamer(0) {};
2839 static TClassLocalStorage *GetStorage(
const TClass *cl)
2845 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2852 local = (
ULong_t)
new TClassLocalStorage();
2855 return (TClassLocalStorage*)local;
2883 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2886 return local->fCollectionProxy;
2897 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2899 if (local->fStreamer==0) {
2901 const std::type_info &orig = (
typeid(*fStreamer) );
2902 if (!local->fStreamer) {
2903 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2905 const std::type_info © = (
typeid(*local->fStreamer) );
2906 if (strcmp(orig.name(),copy.name())!=0) {
2907 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2911 return local->fStreamer;
2957 if (strstr(
name,
"(anonymous)"))
return 0;
2958 if (strncmp(
name,
"class ",6)==0)
name += 6;
2959 if (strncmp(
name,
"struct ",7)==0)
name += 7;
2961 if (!
gROOT->GetListOfClasses())
return 0;
3016 if (!cl && !load)
return 0;
3018 TClass *loadedcl = (dict)();
3028 std::string normalizedName;
3037 if (normalizedName !=
name) {
3038 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(normalizedName.c_str());
3049 normalizedName = cl->
GetName();
3050 checkTable = load && (normalizedName !=
name);
3053 if (!load)
return 0;
3090 if (!loadedcl && !ispair && !ispairbase) {
3091 if (
TDataType* theDataType =
gROOT->GetType(normalizedName.c_str())){
3093 auto underlyingTypeName = theDataType->GetTypeName();
3096 if (underlyingTypeDict){
3097 loadedcl = underlyingTypeDict();
3103 if (loadedcl)
return loadedcl;
3107 if (loadedcl)
return loadedcl;
3114 if (hint_pair_offset && hint_pair_size) {
3122 static const size_t slen = strlen(
"pair");
3123 static const char *associativeContainer[] = {
"map",
"unordered_map",
"multimap",
3124 "unordered_multimap",
"set",
"unordered_set",
"multiset",
"unordered_multiset" };
3125 for(
auto contname : associativeContainer) {
3126 std::string collname = contname;
3127 collname.append( normalizedName.c_str() + slen );
3134 cl = p->GetValueClass();
3147 std::string::size_type posLess = normalizedName.find(
'<');
3148 if (posLess != std::string::npos) {
3155 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());
3157 if (normalizedName.length()) {
3167 auto ci =
gInterpreter->ClassInfo_Factory(normalizedName.c_str());
3169 auto method =
gInterpreter->MethodInfo_Factory(funcDecl);
3175 funcPtr(0, 0,
nullptr, &res);
3187 std::string alternative;
3188 gInterpreter->GetInterpreterTypeName(normalizedName.c_str(), alternative,
kTRUE);
3189 if (alternative.empty())
3191 const char *altname = alternative.c_str();
3192 if (strncmp(altname,
"std::", 5) == 0) {
3197 if (altname != normalizedName && strcmp(altname,
name) != 0) {
3224 if (!
gROOT->GetListOfClasses())
3232 if (cl && cl->
IsLoaded())
return cl;
3239 cl =
GetIdMap()->Find(typeinfo.name());
3258 if (!load)
return 0;
3268 TIter next(
gROOT->GetListOfClassGenerators());
3280 if (!autoload_old) {
3287 cl =
GetClass(typeinfo, load, hint_pair_offset, hint_pair_size);
3293 if (hint_pair_offset) {
3298 free(demangled_name);
3322 if (!
gROOT->GetListOfClasses())
return 0;
3343 if (!load)
return 0;
3346 if (cl) loadedcl =
gROOT->LoadClass(cl->
GetName(),silent);
3347 else loadedcl =
gROOT->LoadClass(
name,silent);
3349 if (loadedcl)
return loadedcl;
3374 if (!
gROOT->GetListOfClasses())
return 0;
3378 DeclIdMap_t::equal_range iter = map->Find(
id);
3379 if (iter.first == iter.second)
return false;
3380 std::vector<TClass*>::iterator vectIt = classes.begin();
3381 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3382 vectIt = classes.insert(vectIt, it->second);
3410 || datamember == 0)
return 0;
3413 const char *start_name = datamember;
3414 while (*start_name ==
'*') ++start_name;
3419 if (
const char *
s = strchr(start_name,
'[')){
3449 if (strchr(
name,
'[')==0) {
3491 std::string givenName(
name);
3494 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3495 if (firstBracket != std::string::npos) {
3497 std::string nameNoDim(givenName.substr(0, firstBracket));
3501 std::string objName(obj->
GetName());
3502 std::string::size_type pos = objName.find_first_of(
"[");
3504 if (pos != std::string::npos) {
3506 if (objName == nameNoDim) {
3515 std::ostringstream ptrname;
3516 ptrname <<
"*" << givenName;
3523 std::string::size_type firstDot = givenName.find_first_of(
".");
3524 if (firstDot == std::string::npos) {
3535 std::string::size_type lastDot = givenName.find_last_of(
".");
3536 std::ostringstream starname;
3537 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3553 std::string::size_type bracket = starname.str().find_first_of(
"[");
3554 if (bracket != std::string::npos) {
3563 std::string firstDotName(givenName.substr(firstDot + 1));
3606 if (!
fBase.load()) {
3627 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3630 if (!
fBase.load()) {
3656 auto temp =
fEnums.load();
3658 if (requestListLoading) {
3673 if (!requestListLoading) {
3728 if (!(*data).IsLoaded())
3731 }
else if (load) (*data).Load();
3742 auto data =
fData.load();
3743 if (data && data->IsLoaded())
3745 }
else if (!load &&
fData)
3786 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3819 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3849 while ((baseClass = (
TBaseClass *) nextBase())) {
3857 while ((method = (
TMethod*)next())) {
3863 if (
m &&
m->GetNargs() == method->
GetNargs())
3888 return cl->IsLoaded();
3916 TIter nextMemb(ldm);
3947 for (
int i = 0; i < 2; i++) {
3963 if (
this == sCIString)
return;
3975 auto checkDicts = [&](
const string &clName){
3982 if (cl && !cl->HasDictionary()) {
3983 cl->GetMissingDictionariesWithRecursionCheck(result, visited, recurse);
3987 const auto &elements = splitType.
fElements;
3988 const auto &templName = elements[0];
3991 if (templName ==
"pair") {
3999 if (templName ==
"unique_ptr" || templName ==
"array") {
4000 checkDicts(elements[1]);
4007 if (templName ==
"tuple") {
4010 const auto nTemplArgs = elements.size() - 1;
4012 for (
auto iTemplArg = 1U; iTemplArg < nTemplArgs; ++iTemplArg) {
4013 checkDicts(elements[iTemplArg]);
4062 if (
this == sCIString)
return;
4119 while ((acl = (
TClass*)nextClass())) {
4120 if (acl == newcl)
continue;
4125 info->
Update(
this, newcl);
4137 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
4186 (*fUsingData).Unload();
4190 (*fMethod).Unload();
4224 if (options==0 || options[0]==0)
return;
4226 if (strstr(options,
"streamerinfo")!=0) {
4230 std::map<std::string, TObjArray*>::iterator it;
4231 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
4232 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
4233 it->second->ls(options);
4260 TIter next(methodList);
4262 while ((method = (
TMethod*) next())) {
4264 if (classPtr != method->
GetClass()) {
4272 TIter nextarg(margsList);
4273 while ((methodArg = (
TMethodArg*)nextarg())) {
4323 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4359 m =
c->GetMethodAllAny(method);
4381 Fatal(
"GetMethod",
"gInterpreter not initialized");
4387 if (!decl)
return 0;
4394 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4395 method,params,objectIsConst ?
"const " :
"",
GetName());
4405 return static_cast<TMethod *
>(method);
4409 if (
TFunction* method = base->FindClassOrBaseMethodWithId(declId))
4410 return static_cast<TMethod *
>(method);
4427 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4431 objectIsConst, mode);
4433 if (!decl)
return 0;
4436 Error(
"GetMethodWithPrototype",
4437 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4438 method,
proto,objectIsConst ?
"const " :
"",
GetName());
4453 if (faddr == (
Long_t)
m->InterfaceMethod())
4472 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4478 if (!decl)
return 0;
4498 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4505 if (!decl)
return 0;
4604 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4623 TMmallocDescTemp setreset;
4632 sinfo->
Build(silent);
4677 newname +=
"@@emulated";
4702 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4715 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4740 newname +=
"@@emulated";
4755 if (!sinfo && (checksum !=
fCheckSum)) {
4765 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4778 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4825 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4851 if (cl ==
this)
return kTRUE;
4861 if (!clbase)
return kFALSE;
4880 if (cl ==
this)
return obj;
4887 return (
void*)((
Long_t)obj+off);
4889 return (
void*)((
Long_t)obj-off);
4943 auto obj =
NewObject(defConstructor, quiet);
4944 if (obj.GetPtr() && obj.GetAllocator()) {
4948 return obj.GetPtr();
4965 TClass__GetCallingNewRAII callingNew(defConstructor);
4970 Error(
"New",
"cannot create object of class %s",
GetName());
4982 TClass__GetCallingNewRAII callingNew(defConstructor);
4987 Error(
"New",
"cannot create object of class %s",
GetName());
4994 TClass__GetCallingNewRAII callingNew(defConstructor);
4999 Error(
"New",
"cannot create object of class %s",
GetName());
5027 TClass__GetCallingNewRAII callingNew(defConstructor);
5028 p = { sinfo->
New(), sinfo};
5038 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
5043 Fatal(
"New",
"This cannot happen!");
5056 auto obj =
NewObject(arena, defConstructor);
5057 if (obj.GetPtr() && obj.GetAllocator()) {
5061 return obj.GetPtr();
5079 TClass__GetCallingNewRAII callingNew(defConstructor);
5083 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5095 TClass__GetCallingNewRAII callingNew(defConstructor);
5099 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5106 TClass__GetCallingNewRAII callingNew(defConstructor);
5128 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5133 TClass__GetCallingNewRAII callingNew(defConstructor);
5134 p = { sinfo->
New(arena), sinfo };
5144 Error(
"New with placement",
"This cannot happen!");
5159 if (obj.GetPtr() && obj.GetAllocator()) {
5163 return obj.GetPtr();
5182 TClass__GetCallingNewRAII callingNew(defConstructor);
5198 TClass__GetCallingNewRAII callingNew(defConstructor);
5209 TClass__GetCallingNewRAII callingNew(defConstructor);
5236 TClass__GetCallingNewRAII callingNew(defConstructor);
5237 p = { sinfo->
NewArray(nElements), sinfo };
5247 Error(
"NewArray",
"This cannot happen!");
5261 if (obj.GetPtr() && obj.GetAllocator()) {
5265 return obj.GetPtr();
5283 TClass__GetCallingNewRAII callingNew(defConstructor);
5287 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5299 TClass__GetCallingNewRAII callingNew(defConstructor);
5303 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5310 TClass__GetCallingNewRAII callingNew(defConstructor);
5332 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5337 TClass__GetCallingNewRAII callingNew(defConstructor);
5338 p = { sinfo->
NewArray(nElements, arena), sinfo };
5354 Error(
"NewArray with placement",
"This cannot happen!");
5366 if (obj == 0)
return;
5373 }
else if ((!dtorOnly) &&
fDelete) {
5416 objVer = iter->second;
5418 currentVersion =
kTRUE;
5425 if (!inRepo || currentVersion) {
5432 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5438 Error(
"Destructor",
"Doing Dump() ...");
5451 Error(
"Destructor",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5458 Error(
"Destructor2",
"Doing Dump() ...");
5469 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5495 if (ary == 0)
return;
5502 Error(
"DeleteArray",
"Destructor only is not supported!");
5541 objVer = iter->second;
5543 currentVersion =
kTRUE;
5550 if (!inRepo || currentVersion) {
5557 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5563 Error(
"DeleteArray",
"Doing Dump() ...");
5576 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5583 Error(
"DeleteArray",
"Doing Dump() ...");
5595 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5605 if (obj.
GetPtr() == 0)
return;
5681 char *
s =
new char[maxsize];
5685 b.ReadString(
s, maxsize);
5686 while (strlen(
s) == (maxsize - 1)) {
5688 b.SetBufferOffset(pos);
5689 maxsize = 2*maxsize;
5691 s =
new char[maxsize];
5692 b.ReadString(
s, maxsize);
5697 ::Error(
"TClass::Load",
"dictionary of class %s not found",
s);
5721 if (result)
return result;
5769 TIter next(
gROOT->GetListOfClassGenerators());
5796 bool autoParse = !
gInterpreter->IsAutoParsingSuspended();
5810 ::Error(
"TClass::LoadClassInfo",
"no interpreter information for class %s is available"
5811 " even though it has a TClass initialization routine.",
5834 const char *dfil,
const char *ifil,
5839 TMmallocDescTemp setreset;
5840 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5848 const char *dfil,
const char *ifil,
5853 TMmallocDescTemp setreset;
5854 return new TClass(cname,
id, dfil, ifil, dl, il);
5960 The class %s transitioned from not having a specified class version\n\
5961 to having a specified class version (the current class version is %d).\n\
5962 However too many different non-versioned layouts of the class have\n\
5963 already been loaded so far. To work around this problem you can\n\
5964 load fewer 'old' file in the same ROOT session or load the C++ library\n\
5965 describing the class %s before opening the files or increase the version\n\
5966 number of the class for example ClassDef(%s,%d).\n\
5967 Do not try to write objects with the current class definition,\n\
5968 the files might not be readable.\n",
5972 The StreamerInfo version %d for the class %s which was read\n\
5973 from a file previously opened has the same version as the active class\n\
5974 but a different checksum. You should update the version to ClassDef(%s,%d).\n\
5975 Do not try to write objects with the current class definition,\n\
5976 the files will not be readable.\n"
6028 TMmallocDescTemp setreset;
6243 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
6267 (*fMethod).Unload();
6273 (*fUsingData).Unload();
6279 if (fState <= kForwardDeclared && !fStreamerInfo->IsEmpty()) {
6372 //info is empty. Let's build the default Streamer descriptor
6374 char *temp = new char[10000];
6378 //add list of base classes
6379 TIter nextb(GetListOfBases());
6381 while ((base = (TBaseClass*) nextb())) {
6382 snprintf(local,100,"%s;",base->GetName());
6383 strlcat(temp,local,10000);
6386 //add list of data members and types
6387 TIter nextd(GetListOfDataMembers());
6388 while ((dm = (TDataMember *) nextd())) {
6389 if (dm->IsEnum()) continue;
6390 if (!dm->IsPersistent()) continue;
6391 Long_t property = dm->Property();
6392 if (property & kIsStatic) continue;
6393 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
6396 if (acl->GetClassVersion() == 0) continue;
6399 // dm->GetArrayIndex() returns an empty string if it does not
6401 const char * index = dm->GetArrayIndex();
6402 if (strlen(index)==0)
6403 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
6405 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
6406 strlcat(temp,local,10000);
6408 //fStreamerInfo = temp;
6497 for (
int i=0; i<il; i++)
id =
id*3+
name[i];
6506 TIter nextBase(tlb);
6515 for (
int i=0; i<il; i++)
id =
id*3+
name[i];
6518 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6527 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6529 TIter nextMemb(tlm);
6545 for (i=0; i<il; i++)
id =
id*3+
name[i];
6557 type.ReplaceAll(
"ULong64_t",
"unsigned long long");
6558 type.ReplaceAll(
"Long64_t",
"long long");
6559 type.ReplaceAll(
"<signed char",
"<char");
6560 type.ReplaceAll(
",signed char",
",char");
6561 if (
type==
"signed char")
type =
"char";
6573 for (i=0; i<il; i++)
id =
id*3+
type[i];
6577 for (
int ii=0;ii<dim;ii++)
id =
id*3+tdm->
GetMaxIndex(ii);
6584 left = strstr(tdm->
GetTitle(),
"[");
6586 const char *right = strstr(left,
"]");
6589 while (left != right) {
6681 return b.ReadClassBuffer(
this,pointer,version,start,count);
6690 return b.ReadClassBuffer(
this,pointer);
6702 b.WriteClassBuffer(
this,pointer);
6715 streamer->
Stream(
b,
object,onfile_class);
6747 if (
b.IsReading()) {
6748 b.ReadClassEmulated(pThis,
object, onfile_class);
6750 b.WriteClassBuffer(pThis,
object);
6781 if (
b.IsReading()) {
6782 b.ReadClassBuffer(pThis,
object, onfile_class);
6786 b.WriteClassBuffer(pThis,
object);
6805 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
6969 for (
Int_t i=-1;i<ninfos;++i) {
6991 for (
Int_t i=-1;i<ninfos;i++) {
6995 if (!info)
continue;
7036 std::map<std::string, TObjArray*>::iterator it;
7039 it = (*fConversionStreamerInfo).find( cl->
GetName() );
7041 if( it != (*fConversionStreamerInfo).end() ) {
7045 if( arr && version >= -1 && version < arr->GetSize() && arr->
At( version ) )
7057 if( version >= -1 && version < clSI->GetSize() )
7100 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
7103 Error(
"GetConversionStreamerInfo",
"Conversion StreamerInfo from %s to %s version %d has already been created",
7144 std::map<std::string, TObjArray*>::iterator it;
7148 it = (*fConversionStreamerInfo).find( cl->
GetName() );
7150 if( it != (*fConversionStreamerInfo).end() ) {
7206 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
7225 Error(
"RegisterStreamerInfo",
7226 "Register StreamerInfo for %s on non-empty slot (%d).",
7266 static const char *handVerified[] = {
7267 "TEnvRec",
"TDataType",
"TObjArray",
"TList",
"THashList",
7268 "TClass",
"TCling",
"TInterpreter",
"TMethod",
"ROOT::Internal::TCheckHashRecursiveRemoveConsistency",
7269 "TCheckHashRecursiveRemoveConsistency",
"TGWindow",
7270 "TDirectory",
"TDirectoryFile",
"TObject",
"TH1",
7271 "TQClass",
"TGlobal" };
7273 if (cname && cname[0]) {
7274 for (
auto cursor : handVerified) {
7275 if (strcmp(cname, cursor) == 0)
TClass *(* DictFuncPtr_t)()
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
void(* ClassStreamerFunc_t)(TBuffer &, void *)
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
R__EXTERN TClassTable * gClassTable
TVirtualMutex * gInterpreterMutex
TClass::ENewType & TClass__GetCallingNew()
static bool IsFromRootCling()
ROOT::TMapDeclIdToTClass DeclIdMap_t
ROOT::TMapTypeToTClass IdMap_t
void(* tcling_callfunc_Wrapper_t)(void *, int, void **, void *)
const Bool_t kIterBackward
R__EXTERN TInterpreter * gCling
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
typedef void((*Func_t)())
R__EXTERN TSystem * gSystem
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
#define R__LOCKGUARD2(mutex)
#define R__LOCKGUARD(mutex)
#define R__WRITE_LOCKGUARD(mutex)
#define R__READ_LOCKGUARD(mutex)
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...
void SetClass(TClass *cls)
Set the TClass associated with this rule set.
static bool Check(TClass &classRef)
A spin mutex-as-code-guard class.
Bool_t SetFromRule(const char *rule)
Set the content fot this object from the rule See TClass::AddRule for details on the syntax.
const char * GetTargetString() const
Get the target data members of this rule as a simple string (i.e. the in memory data member).
const char * GetVersion() const
Get the version string.
const char * GetTargetClass() const
Get the targte class of this rule (i.e. the in memory class).
Each class (see TClass) has a linked list of its base class(es).
Int_t GetDelta()
Get offset from "this" to part of base class.
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
Using a TBrowser one can browse all ROOT objects.
Buffer base class used for serializing objects.
Objects following this interface can be passed onto the TROOT object to implement a user customized w...
virtual TClass * GetClass(const char *classname, Bool_t load)=0
TClassRef is used to implement a permanent reference to a TClass object.
virtual void Stream(TBuffer &b, void *objp, const TClass *onfileClass)
virtual TClassStreamer * Generate() const
ClassStreamerFunc_t fStreamer
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name).
static TProtoClass * GetProtoNorm(const char *cname)
Given the class normalized name returns the TClassProto object for the class.
static DictFuncPtr_t GetDictNorm(const char *cname)
Given the normalized class name returns the Dictionary() function of a class (uses hash of name).
~InsertTClassInRegistryRAII()
InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry)
Bool_t HasDeclName(const char *name) const
void AddQualifiedName(const char *name)
Extract this part of the name.
TDeclNameRegistry(Int_t verbLevel=0)
TDeclNameRegistry class constructor.
std::atomic_flag fSpinLock
TClass instances represent classes, structs and namespaces in the ROOT type system.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
Bool_t IsSyntheticPair() const
RepoCont_t fObjectVersionRepository
ShowMembersFunc_t fShowMembers
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
TList * GetListOfUsingDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of using declarations of a class.
void ForceReload(TClass *oldcl)
we found at least one equivalent.
ROOT::DelArrFunc_t fDeleteArray
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TClassStreamer * fStreamer
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
TListOfFunctionTemplates * fFuncTemplate
ClassStreamerFunc_t fStreamerFunc
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
void AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
Adopt the TMemberStreamer pointer to by p and use it to Stream non basic member name.
void ResetInstanceCount()
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
void SetCanSplit(Int_t splitmode)
Set the splitability of this class:
TObject * Clone(const char *newname="") const
Create a Clone of this TClass object using a different name but using the same 'dictionary'.
TList * CreateListOfDataMembers(std::atomic< TListOfDataMembers * > &data, TDictionary::EMemberSelection selection, bool load)
Create the list containing the TDataMembers (of actual data members or members pulled in through usin...
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...
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
ConvSIMap_t fConversionStreamerInfo
ROOT::DirAutoAdd_t fDirAutoAdd
Bool_t HasDataMemberInfo() const
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
TList * GetMenuList() const
Return the list of menu items associated with the class.
ROOT::MergeFunc_t fMerge
saved info to call a IsA member function
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
virtual void Browse(TBrowser *b)
This method is called by a browser to get the class information.
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
EState fState
cached of the streaming method to use
ROOT::DesFunc_t GetDestructor() const
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
Int_t fStreamerType
saved info to call Streamer
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
std::atomic< TList * > fBase
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
Long_t GetDataMemberOffset(const char *membername) const
return offset for member name.
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
TMethod * GetClassMethod(Long_t faddr)
Look for a method in this class that has the interface function address faddr.
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
static void AddClassToDeclIdMap(TDictionary::DeclId_t id, TClass *cl)
static: Add a TClass* to the map of classes.
virtual ~TClass()
TClass dtor. Deletes all list that might have been created.
Bool_t fIsSyntheticPair
Indicates whether this class can be split or not. Values are -1, 0, 1, 2.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return list containing the TEnums of a class.
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.
const char * fImplFileName
void RegisterStreamerInfo(TVirtualStreamerInfo *info)
Register the StreamerInfo in the given slot, change the State of the TClass as appropriate.
std::atomic< UInt_t > fCheckSum
void UnregisterAddressInRepository(const char *where, void *location, const TClass *what) const
std::atomic< TListOfFunctions * > fMethod
static void RemoveClassDeclId(TDictionary::DeclId_t id)
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
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.
const char * fDeclFileName
void SetCollectionProxy(const ROOT::Detail::TCollectionProxyInfo &)
Create the collection proxy object (and the streamer object) from using the information in the TColle...
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
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.
static std::atomic< Int_t > fgClassCount
TVirtualStreamerInfo * GetCurrentStreamerInfo()
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
void AddImplFile(const char *filename, int line)
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
std::atomic< TListOfEnums * > fEnums
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
TVirtualMutex * fOVRMutex
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Int_t GetNmethods()
Return the number of methods of this class Note that in case the list of methods is not yet created,...
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
static IdMap_t * GetIdMap()
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
ROOT::NewFunc_t GetNew() const
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
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 SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
void LoadClassInfo() const
Try to load the ClassInfo if available.
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
TVirtualStreamerInfo * GetStreamerInfoImpl(Int_t version, Bool_t silent) const
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...
TViewPubFunctions * fAllPubMethod
Bool_t HasInterpreterInfo() const
static void AddClass(TClass *cl)
static: Add a class to the list and map of classes.
void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse)
Verify the base classes always.
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
std::atomic< Long_t > fProperty
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...
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
ROOT::DelArrFunc_t GetDeleteArray() const
Bool_t HasInterpreterInfoInMemory() const
ClassConvStreamerFunc_t fConvStreamerFunc
void SetRuntimeProperties()
Internal routine to set calculate the class properties that can only be known at run-time,...
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
const std::type_info * GetTypeInfo() const
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
void Move(void *arenaFrom, void *arenaTo) const
Register the fact that an object was moved from the memory location 'arenaFrom' to the memory locatio...
static DeclIdMap_t * GetDeclIdMap()
Short_t GetDeclFileLine() const
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
const char * GetImplFileName() const
TList * GetListOfRealData() const
Int_t Size() const
Return size of object of this class.
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
ROOT::NewArrFunc_t GetNewArray() const
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.
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
TMethod * GetClassMethodWithPrototype(const char *name, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
Bool_t CanIgnoreTObjectStreamer()
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
TObjArray * fStreamerInfo
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
TVirtualCollectionProxy * fCollectionProxy
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
void ls(Option_t *opt="") const
The ls function lists the contents of a class on stdout.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
void Store(TBuffer &b) const
Store class description on I/O buffer.
void InterpretedShowMembers(void *obj, TMemberInspector &insp, Bool_t isTransient)
Do a ShowMembers() traversal of all members and base classes' members using the reflection informatio...
static THashTable * fgClassTypedefHash
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.
std::atomic< TListOfDataMembers * > fData
static void StreamerStreamerInfo(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of where we should directly use the StreamerInfo.
const TObjArray * GetStreamerInfos() const
void SetClassVersion(Version_t version)
Private function.
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
const std::type_info * fTypeInfo
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
static void StreamerTObject(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects.
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
static void RemoveClass(TClass *cl)
static: Remove a class from the list and map of classes
Bool_t HasLocalHashMember() const
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function).
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
ClassInfo_t * GetClassInfo() const
TViewPubDataMembers * fAllPubData
Int_t GetBaseClassOffset(const TClass *toBase, void *address=0, bool isDerivedObject=true)
void Dump() const
Dump contents of object on stdout.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
Bool_t HasConsistentHashMember()
Return 'true' if we can guarantee that if this class (or any class in this class inheritance hierarch...
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
Long_t Property() const
Returns the properties of the TClass as a bit field stored as a Long_t value.
Long_t fOffsetStreamer
Properties that can only be evaluated at run-time.
ObjectPtr NewObjectArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
void ResetCaches()
To clean out all caches.
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
Long_t ClassProperty() const
Return the C++ property of this class, eg.
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
void ReplaceWith(TClass *newcl) const
void RegisterAddressInRepository(const char *where, void *location, const TClass *what) const
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
void Draw(Option_t *option="")
Draw detailed class inheritance structure.
std::atomic< TMethodCall * > fIsAMethod
static Int_t ReadRules()
Read the class.rules files from the default location:.
Bool_t CanSplitBaseAllow()
Pointer to the function implementing streaming for this class.
void MoveAddressInRepository(const char *where, void *oldadd, void *newadd, const TClass *what) const
std::atomic< StreamerImpl_t > fStreamerImpl
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
std::atomic< TClass ** > fPersistentRef
IsAGlobalFunc_t fGlobalIsA
pointer to the class's IsA proxy.
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...
Short_t GetImplFileLine() const
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
std::atomic< UChar_t > fRuntimeProperties
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
ROOT::DelFunc_t GetDelete() const
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
void SetClassSize(Int_t sizof)
TMethod * FindClassOrBaseMethodWithId(DeclId_t faddr)
Find a method with decl id in this class or its bases.
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
Long_t fClassProperty
Property See TClass::Property() for details.
TString fContextMenuTitle
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.
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
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...
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
ROOT::MergeFunc_t GetMerge() const
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
std::atomic< Bool_t > fHasRootPcmInfo
C++ Property of the class (is abstract, has virtual table, etc.)
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
ROOT::DesFunc_t fDestructor
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
ObjectPtr NewObject(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
TFunctionTemplate * GetFunctionTemplate(const char *name)
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
void BuildEmulatedRealData(const char *name, Long_t offset, TClass *cl, Bool_t isTransient=kFALSE)
Build the list of real data for an emulated class.
ROOT::NewArrFunc_t fNewArray
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.
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
bool IsClassStructOrUnion() const
@ kHasCustomStreamerMember
std::atomic< TListOfDataMembers * > fUsingData
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
void ResetMenuList()
Resets the menu list to it's standard value.
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.
Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="")
Function called by the Streamer functions to serialize object at p to buffer b.
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Collection abstract base class.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual void Add(TObject *obj)=0
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
Int_t GetMaxIndex(Int_t dim) const
Return maximum index for array dimension "dim".
const char * GetTrueTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
Bool_t IsPersistent() const
Int_t GetArrayDim() const
Return number of array dimensions.
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
Bool_t IsaPointer() const
Return true if data member is a pointer.
TDataType * GetDataType() const
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
Basic data type descriptor (datatype information is obtained from CINT).
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
const char * AsString(void *buf) const
Return string containing value in buffer formatted according to the basic data type.
TString GetTypeName()
Get basic type of typedef, e,g.
static TDataType * GetDataType(EDataType type)
Given a EDataType type, get the TDataType* that represents it.
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time.
This class defines an abstract interface that must be implemented by all classes that contain diction...
EMemberSelection
Kinds of members to include in lists.
static TEnum * GetEnum(const std::type_info &ti, ESearchAction sa=kALoadAndInterpLookup)
This class stores a (key,value) pair using an external hash.
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
void AddAt(UInt_t slot, ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table.
Dictionary for function template This class describes one single function template.
Global functions class (global functions are obtained from CINT).
Int_t GetNargs() const
Number of function arguments.
THashTable implements a hash table to store TObject's.
TObject * Remove(TObject *obj)
Remove object from the hashtable.
const TList * GetListForObject(const char *name) const
Return the TList corresponding to object's name based hash value.
void Add(TObject *obj)
Add object to the hash table.
TObject * FindObject(const char *name) const
Find object using its name.
virtual Bool_t ClassInfo_HasMethod(ClassInfo_t *, const char *) const
virtual const char * DataMemberInfo_Name(DataMemberInfo_t *) const
virtual const char * DataMemberInfo_TypeName(DataMemberInfo_t *) const
virtual int DataMemberInfo_TypeSize(DataMemberInfo_t *) const
virtual Long_t ClassInfo_GetBaseOffset(ClassInfo_t *, ClassInfo_t *, void *=0, bool=true) const
virtual void * ClassInfo_New(ClassInfo_t *) const
virtual Bool_t ClassInfo_IsValid(ClassInfo_t *) const
virtual Int_t AutoParse(const char *cls)=0
virtual void ClassInfo_Delete(ClassInfo_t *) const
virtual void ClassInfo_DeleteArray(ClassInfo_t *, void *, bool) const
virtual Long_t ClassInfo_Property(ClassInfo_t *) const
virtual int ClassInfo_Size(ClassInfo_t *) const
virtual const char * ClassInfo_FullName(ClassInfo_t *) const
virtual int SetClassAutoLoading(int) const
virtual const char * ClassInfo_Title(ClassInfo_t *) const
virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t *) const
virtual int DataMemberInfo_Next(DataMemberInfo_t *) const
virtual DataMemberInfo_t * DataMemberInfo_Factory(ClassInfo_t *, TDictionary::EMemberSelection) const
virtual Long_t DataMemberInfo_Property(DataMemberInfo_t *) const
virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t *) const
virtual void DataMemberInfo_Delete(DataMemberInfo_t *) const
virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t *, Int_t) const
TDictionary::DeclId_t DeclId_t
virtual Bool_t ClassInfo_HasDefaultConstructor(ClassInfo_t *, Bool_t=kFALSE) const
virtual Long_t ClassInfo_ClassProperty(ClassInfo_t *) const
virtual void ClassInfo_Destruct(ClassInfo_t *, void *) const
TIsAProxy implementation class.
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
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...
void Load()
Load all the functions known to the interpreter for the scope 'fClass' into this collection.
virtual void Delete(Option_t *option="")
Delete all TFunction object files.
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
TFunction * Get(DeclId_t id)
Return (after creating it if necessary) the TMethod or TFunction describing the function correspondin...
virtual TObject * FindObject(const TObject *obj) const
Find object using its hash value (returned by its Hash() member).
virtual TList * GetListForObject(const char *name) const
Return the set of overloads for this name, collecting all available ones.
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual void AddFirst(TObject *obj)
Add object at the beginning of the list.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual TObjLink * FirstLink() const
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual void AddLast(TObject *obj)
Add object at the end of the list.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Abstract base class for accessing the data-members of a class.
virtual void Inspect(TClass *cl, const char *parent, const char *name, const void *addr)
Each ROOT method (see TMethod) has a linked list of its arguments.
const char * GetFullTypeName() const
Get full type description of method argument, e.g.: "class TDirectory*".
Each ROOT class (see TClass) has a linked list of methods.
TClass * GetClass() const
EMenuItemKind IsMenuItem() const
virtual TList * GetListOfMethodArgs()
Returns methodarg list and additionally updates fDataMember in TMethod by calling FindDataMember();.
virtual void ls(Option_t *option="") const
List TNamed name and title.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * GetName() const
Returns name of object.
Int_t GetEntriesFast() const
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
TObject * UncheckedAt(Int_t i) const
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
Int_t GetLast() const
Return index of last object in array.
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
TObject * At(Int_t idx) const
Wrapper around a TObject so it can be stored in a TList.
TObject * GetObject() const
Collectable string class.
TObjString(const char *s="")
Mother of all ROOT objects.
virtual void Inspect() const
Dump contents of this object in a graphics canvas.
static void SetObjectStat(Bool_t stat)
Turn on/off tracking of objects in the TObjectTable.
virtual const char * GetName() const
Returns name of object.
virtual void Browse(TBrowser *b)
Browse object. May be overridden for another default action.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
R__ALWAYS_INLINE Bool_t IsZombie() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
static Bool_t GetObjectStat()
Get status of object stat flag.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Class used by TMap to store (key,value) pairs.
Persistent version of a TClass.
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
The TRealData class manages the effective list of all data members for a given class.
void AdoptStreamer(TMemberStreamer *p)
virtual const char * GetName() const
Returns name of object.
Long_t GetThisOffset() const
void SetIsObject(Bool_t isObject)
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual Bool_t IsaPointer() const
const char * GetTypeName() const
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
View implementing the TList interface and giving access all the TDictionary describing public data me...
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' and all its bases classes.
void Delete(Option_t *option="")
Delete is not allowed in this class.
View implementing the TList interface and giving access all the TFunction describing public methods i...
void Load()
Load all the functions known to the interpreter for the scope 'fClass' and all its bases classes.
virtual Int_t GetProperties() const
virtual UInt_t Sizeof() const =0
virtual TClass::ObjectPtr NewObjectArray(Int_t nElements) const
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) const
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE) const
virtual TClass * GetValueClass() const =0
virtual TClass::ObjectPtr NewObject() const
virtual void * At(UInt_t idx)=0
virtual Int_t GetCollectionType() const =0
virtual UInt_t Size() const =0
virtual TVirtualCollectionProxy * Generate() const =0
virtual Bool_t HasPointers() const =0
virtual void SetClass(TClass *cl)=0
This class implements a mutex interface.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
virtual void SetClass(TClass *classptr)=0
virtual TVirtualRefProxy * Clone() const =0
Abstract Interface class describing Streamer information for one class.
virtual TVirtualStreamerInfo * GenerateInfoForPair(const std::string &pairclassname, bool silent, size_t hint_pair_offset, size_t hint_pair_size)=0
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE)=0
virtual void SetClassVersion(Int_t vers)=0
virtual TClassStreamer * GenEmulatedClassStreamer(const char *class_name, Bool_t silent)=0
Bool_t IsCompiled() const
virtual TVirtualStreamerInfo * NewInfo(TClass *cl)=0
virtual void BuildCheck(TFile *file=0, Bool_t load=kTRUE)=0
virtual TClass * GetActualClass(const void *obj) const =0
virtual UInt_t GetCheckSum() const =0
virtual Int_t GetOffset(const char *) const =0
static const char * GetElementCounterStart(const char *dmTitle)
Given a comment/title declaring an array counter, for example:
virtual void Build(Bool_t isTransient=kFALSE)=0
virtual Bool_t BuildFor(const TClass *cl)=0
virtual TVirtualCollectionProxy * GenExplicitProxy(const ::ROOT::Detail::TCollectionProxyInfo &info, TClass *cl)=0
virtual void Clear(Option_t *)=0
Set name and title to empty strings ("").
virtual TVirtualCollectionProxy * GenEmulatedProxy(const char *class_name, Bool_t silent)=0
virtual void SetClass(TClass *cl)=0
virtual void * NewArray(Long_t nElements, void *ary=0)=0
virtual TObjArray * GetElements() const =0
virtual Int_t GetSize() const =0
virtual void BuildOld()=0
static TVirtualStreamerInfo * Factory()
Static function returning a pointer to a new TVirtualStreamerInfo object.
virtual Version_t GetOldVersion() const =0
virtual void * New(void *obj=0)=0
virtual Int_t GetOnFileClassVersion() const =0
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE)=0
virtual Bool_t CompareContent(TClass *cl, TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete, TFile *file)=0
virtual Int_t GetClassVersion() const =0
virtual void Update(const TClass *oldClass, TClass *newClass)=0
virtual TClass * GetClass() const =0
void Add(RHist< DIMENSIONS, PRECISION, STAT_TO... > &to, const RHist< DIMENSIONS, PRECISION, STAT_FROM... > &from)
Add two histograms.
R__EXTERN void * gMmallocDesc
Bool_t HasConsistentHashMember(TClass &clRef)
Return true is the Hash/RecursiveRemove setup is consistent, i.e.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void(* DirAutoAdd_t)(void *, TDirectory *)
R__EXTERN TVirtualRWMutex * gCoreMutex
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
void(* DesFunc_t)(void *)
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).
void(* DelFunc_t)(void *)
void *(* NewArrFunc_t)(Long_t size, void *arena)
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(* DelArrFunc_t)(void *)
void *(* NewFunc_t)(void *)
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
bool IsStdPairBase(std::string_view name)
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
bool IsStdArray(std::string_view name)
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
bool IsStdPair(std::string_view name)
bool IsInterpreterDetail(const char *type)
Return true if the type is one the interpreter details which are only forward declared (ClassInfo_t e...
char * DemangleTypeIdName(const std::type_info &ti, int &errorCode)
Demangle in a portable way the type id name.
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
bool IsArtificial(std::string_view name)
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.
bool IsSTLBitset(const char *type)
Return true is the name is std::bitset<number> or bitset<number>
static constexpr double s
UInt_t Find(std::list< std::pair< const Node< T > *, Float_t > > &nlist, const Node< T > *node, const T &event, UInt_t nfind)
Short_t Min(Short_t a, Short_t b)
bool IsTemplate()
Check if the type is a template.
std::vector< std::string > fElements
TVirtualStreamerInfo * GetAllocator() const