109#define RTLD_DEFAULT ((void *)::GetModuleHandle(NULL))
110#define dlsym(library, function_name) ::GetProcAddress((HMODULE)library, function_name)
136 static constexpr const char kUndeterminedClassInfoName[] =
"<NOT YET DETERMINED FROM fClassInfo>";
138 class TMmallocDescTemp {
142 TMmallocDescTemp(
void *value = 0) :
163 TNameMapNode(
const char *typedf,
const char *orig) :
176 const static bool foundSymbol = dlsym(RTLD_DEFAULT,
"usedToIdentifyRootClingByDlSym");
199 auto strLen = strlen(
name);
200 if (strLen == 0)
return;
202 const char* endCharPtr = strchr(
name,
'<');
203 endCharPtr = !endCharPtr ? &
name[strLen] : endCharPtr;
205 const char* beginCharPtr = endCharPtr;
206 while (beginCharPtr!=
name){
207 if (*beginCharPtr==
':'){
213 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
214 std::string s(beginCharPtr, endCharPtr);
216 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n", s.c_str(),
name);
218 fClassNamesSet.insert(s);
228 found = fClassNamesSet.find(
name) != fClassNamesSet.end();
237 if (fVerbLevel > 1) {
238 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",
239 (
long unsigned int)fClassNamesSet.size());
240 for (
auto const & key: fClassNamesSet) {
241 printf(
" - %s\n", key.c_str());
272struct TClass__GetCallingNewRAII
279 fOldValue(fCurrentValue)
281 fCurrentValue = newvalue;
284 ~TClass__GetCallingNewRAII()
286 fCurrentValue = fOldValue;
306 std::pair<RepoCont_t::iterator, Bool_t> tmp =
fObjectVersionRepository.insert(RepoCont_t::value_type>(location, version));
308 Warning(where,
"Reregistering an object of class '%s' version %d at address %p",
what->GetName(), version, p);
312 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p",
what->GetName(), version, location);
325 RepoCont_t::iterator tmp = cur++;
326 if ((tmp->first == location) && (tmp->second ==
what->GetClassVersion())) {
342 size_t objsize =
what->Size();
343 long delta = (
char*)newadd - (
char*)oldadd;
347 RepoCont_t::iterator tmp = cur++;
348 if (oldadd <= tmp->
first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
364#define R__USE_STD_MAP
365 class TMapTypeToTClass {
366#if defined R__USE_STD_MAP
370 typedef std::map<std::string,TClass*>
IdMap_t;
371 typedef IdMap_t::key_type key_type;
372 typedef IdMap_t::const_iterator const_iterator;
373 typedef IdMap_t::size_type size_type;
376 typedef TClass* mapped_type;
378 typedef IdMap_t::mapped_type mapped_type;
385 void Add(
const key_type &key, mapped_type &obj)
390 mapped_type Find(
const key_type &key)
const
393 IdMap_t::const_iterator iter = fMap.find(key);
395 if (iter != fMap.end()) cl = iter->second;
398 void Remove(
const key_type &key) {
407#ifdef R__COMPLETE_MEM_TERMINATION
416 void Add(
const char *key,
TClass *&obj) {
418 fMap.Add(realkey, obj);
420 TClass* Find(
const char *key)
const {
425 void Remove(
const char *key) {
427 TObject *actual = fMap.Remove(&realkey);
433 class TMapDeclIdToTClass {
436 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
437 typedef DeclIdMap_t::key_type key_type;
438 typedef DeclIdMap_t::mapped_type mapped_type;
439 typedef DeclIdMap_t::const_iterator const_iterator;
440 typedef std::pair <const_iterator, const_iterator> equal_range;
441 typedef DeclIdMap_t::size_type size_type;
447 void Add(
const key_type &key, mapped_type obj)
450 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
453 size_type CountElementsWithKey(
const key_type &key)
455 return fMap.count(key);
457 equal_range
Find(
const key_type &key)
const
460 return fMap.equal_range(key);
462 void Remove(
const key_type &key) {
471#ifdef R__COMPLETE_MEM_TERMINATION
473 return &gIdMapObject;
482#ifdef R__COMPLETE_MEM_TERMINATION
484 return &gDeclIdMapObject;
499 gROOT->GetListOfClasses()->Add(cl);
513 if (!cl || !
id)
return;
525 gROOT->GetListOfClasses()->Remove(oldcl);
557 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
560 void Inspect(
TClass *cl,
const char *parent,
const char *
name,
const void *addr,
Bool_t isTransient);
574void TDumpMembers::Inspect(
TClass *cl,
const char *pname,
const char *mname,
const void *add,
Bool_t )
576 const Int_t kvalue = 30;
578 const Int_t ktitle = 50;
580 const Int_t ktitle = 42;
582 const Int_t kline = 1024;
590 const char *memberName;
591 const char *memberFullTypeName;
592 const char *memberTitle;
598 if (member->GetDataType()) {
601 memberName = member->GetName();
602 memberFullTypeName = member->GetFullTypeName();
603 memberTitle = member->GetTitle();
604 isapointer = member->IsaPointer();
605 isbasic = member->IsBasic();
607 isarray = member->GetArrayDim();
613 const char *cursor = mname;
614 while ( (*cursor)==
'*' ) ++cursor;
616 Ssiz_t pos = elname.Index(
"[");
617 if ( pos !=
kNPOS ) {
618 elname.Remove( pos );
621 if (!element)
return;
626 memberName = element->
GetName();
631 isbasic = membertype !=0;
639 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
643 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
647 Bool_t isTString = (dataClass == TString::Class());
648 static TClassRef stdClass(
"std::string");
649 Bool_t isStdString = (dataClass == stdClass);
652 for (i = 0;i < kline; i++)
line[i] =
' ';
658 char *pointer = (
char*)add;
659 char **ppointer = (
char**)(pointer);
662 char **p3pointer = (
char**)(*ppointer);
669 }
else if (membertype) {
671 i = strlen(*ppointer);
672 if (kvalue+i > kline) i=kline-1-kvalue;
674 for (
Int_t j = 0; j < i; j++) {
675 if (!std::isprint((*ppointer)[j])) {
681 strncpy(
line + kvalue, *ppointer, i);
689 }
else if (!strcmp(memberFullTypeName,
"char*") ||
690 !strcmp(memberFullTypeName,
"const char*")) {
691 i = strlen(*ppointer);
692 if (kvalue+i >= kline) i=kline-1-kvalue;
694 for (
Int_t j = 0; j < i; j++) {
695 if (!std::isprint((*ppointer)[j])) {
701 strncpy(
line + kvalue, *ppointer, std::min( i, kline - kvalue));
711 }
else if (membertype) {
713 cdatime = (
UInt_t*)pointer;
715 snprintf(&
line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
723 std::string *str = (std::string*)pointer;
725 }
else if (isTString) {
735 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
736 i = strlen(&
line[0]);
line[i] =
' ';
737 assert(250 > ktitle);
738 strlcpy(&
line[ktitle],memberTitle,250-ktitle+1);
742 strncat(
line,
" ...", kline-strlen(
line)-1);
754 void *fRealDataObject;
758 TBuildRealData(
void *obj,
TClass *cl) {
760 fRealDataObject = obj;
764 void Inspect(
TClass *cl,
const char *parent,
const char *
name,
const void *addr,
Bool_t isTransient);
771void TBuildRealData::Inspect(
TClass* cl,
const char* pname,
const char* mname,
const void* add,
Bool_t isTransient)
783 isTransientMember =
kTRUE;
790 if (cl != fRealDataClass) {
791 if (!fRealDataClass->InheritsFrom(cl)) {
792 Ssiz_t dot = rname.Index(
'.');
797 if (!fRealDataClass->GetDataMember(rname)) {
812 if (!fRealDataClass->GetBaseDataMember(rname)) {
827 fRealDataClass->GetListOfRealData()->Add(rd);
837 fRealDataClass->GetListOfRealData()->Add(rd);
882 void* addrForRecursion = 0;
883 if (GetObjectValidity() == kValidObjectGiven)
884 addrForRecursion =
const_cast<void*
>(add);
891 fRealDataClass->GetListOfRealData()->Add(rd);
908 fBrowser =
b; fCount = 0; }
909 virtual ~TAutoInspector() { }
911 virtual void Inspect(
TClass *cl,
const char *parent,
const char *
name,
const void *addr,
Bool_t isTransient);
912 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
918void TAutoInspector::Inspect(
TClass *cl,
const char *tit,
const char *
name,
919 const void *addr,
Bool_t )
921 if(tit && strchr(tit,
'.')) return ;
922 if (fCount && !fBrowser)
return;
929 int ln = strcspn(
name,
"[ ");
933 if (!classInfo)
return;
943 if ((found = (iname==mname)))
break;
955 if (mname ==
"G__virtualinfo")
return;
957 int size =
sizeof(
void*);
977 for(
int i=0; i<nmax; i++) {
979 char *ptr = (
char*)addr + i*size;
986 if (!fBrowser)
return;
994 bwname = actualClass->
GetName();
1001 strcmp(bwname.
Data(),actualClass->
GetName())==0) {
1003 int l = strcspn(bwname.
Data(),
"[ ");
1004 if (
l<bwname.
Length() && bwname[
l]==
'[') {
1005 char cbuf[13];
snprintf(cbuf,13,
"[%02d]",i);
1008 bwname = (
const char*)ts;
1014 fBrowser->Add(obj,clm,bwname);
1021 fBrowser->Add( obj, clm, bwname );
1027 int sz = proxy->
Size();
1029 char fmt[] = {
"#%09d"};
1030 fmt[3] =
'0'+(
int)
log10(
double(sz))+1;
1032 for (
int ii=0;ii<sz;ii++) {
1033 void *p = proxy->
At(ii);
1045 fBrowser->Add( p, actualCl, ts );
1084 TMmallocDescTemp setreset;
1101 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1102 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1103 fAllPubMethod(0), fClassMenuList(0),
1104 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1105 fInstanceCount(0), fOnHeap(0),
1106 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1107 fTypeInfo(0), fShowMembers(0),
1108 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1109 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1110 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1111 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1112 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1114 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1115 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1120 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1123 TMmallocDescTemp setreset;
1130 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1134 ::Warning(
"TClass::TClass",
"no dictionary for class %s is available",
name);
1148 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1149 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1150 fAllPubMethod(0), fClassMenuList(0),
1151 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1152 fInstanceCount(0), fOnHeap(0),
1153 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1154 fTypeInfo(0), fShowMembers(0),
1155 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1156 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1157 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1158 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1159 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1161 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1162 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1165 Init(
name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1175 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1176 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1177 fAllPubMethod(0), fClassMenuList(0),
1178 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1179 fInstanceCount(0), fOnHeap(0),
1180 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1181 fTypeInfo(0), fShowMembers(0),
1182 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1183 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1184 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1185 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1186 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1188 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1189 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1201 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1202 Init(
name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1219 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1220 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1221 fAllPubMethod(0), fClassMenuList(0),
1222 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1223 fInstanceCount(0), fOnHeap(0),
1224 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1225 fTypeInfo(0), fShowMembers(0),
1226 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1227 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1228 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1229 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1230 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1232 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1233 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1238 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1244 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1246 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1253 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1269 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1270 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1271 fAllPubMethod(0), fClassMenuList(0),
1272 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1273 fInstanceCount(0), fOnHeap(0),
1274 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1275 fTypeInfo(0), fShowMembers(0),
1276 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1277 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1278 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1279 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1280 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1282 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1283 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1286 Init(
name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1295 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1299 fStreamerInfo(0), fConversionStreamerInfo(0), fRealData(0),
1300 fBase(0), fData(0), fUsingData(0), fEnums(0), fFuncTemplate(0), fMethod(0), fAllPubData(0),
1303 fDeclFileName(
""), fImplFileName(
""), fDeclFileLine(0), fImplFileLine(0),
1304 fInstanceCount(0), fOnHeap(0),
1305 fCheckSum(0), fCollectionProxy(0), fClassVersion(0), fClassInfo(0),
1306 fTypeInfo(0), fShowMembers(0),
1307 fStreamer(0), fIsA(0), fGlobalIsA(0), fIsAMethod(0),
1308 fMerge(0), fResetAfterMerge(0), fNew(0), fNewArray(0), fDelete(0), fDeleteArray(0),
1309 fDestructor(0), fDirAutoAdd(0), fStreamerFunc(0), fConvStreamerFunc(0), fSizeof(-1),
1310 fCanSplit(-1), fIsSyntheticPair(
kFALSE), fProperty(0), fClassProperty(0), fHasRootPcmInfo(
kFALSE), fCanLoadClassInfo(
kFALSE),
1311 fIsOffsetStreamerSet(
kFALSE), fVersionUsed(
kFALSE), fRuntimeProperties(0), fOffsetStreamer(0), fStreamerType(
TClass::
kDefault),
1312 fState(kHasTClassInit),
1313 fCurrentInfo(0), fLastReadInfo(0), fRefProxy(0),
1314 fSchemaRules(0), fStreamerImpl(&
TClass::StreamerDefault)
1318 Init(
name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1336 info->
Clear(
"build");
1360 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1361 ClassInfo_t *givenInfo,
1365 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1367 ::Error(
"TClass::Init",
"The name parameter is invalid (null or empty)");
1408 TClass **persistentRef = 0;
1426 info->
Clear(
"build");
1444 (*fMethod).
fClass =
this;
1456 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1459 bool invalid = !
gInterpreter->ClassInfo_IsValid(givenInfo);
1460 bool notloaded = !
gInterpreter->ClassInfo_IsLoaded(givenInfo);
1461 auto property =
gInterpreter->ClassInfo_Property(givenInfo);
1463 if (invalid || (notloaded && (property &
kIsNamespace)) ||
1503 proto->FillTClass(
this);
1529 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass "
1530 "initialization routine.",
1548 if (!givenInfo && strchr (
name,
'<')) {
1560 if (resolvedThis !=
name) {
1584 if (resolvedThis !=
fName) {
1586 if (oldcl && oldcl !=
this) {
1592 while ( TNameMapNode* htmp =
static_cast<TNameMapNode*
> (next()) ) {
1593 if (resolvedThis != htmp->String())
continue;
1595 if (oldcl && oldcl !=
this) {
1613 if (persistentRef) {
1620 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1631 }
else if (!silent) {
1632 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1657 while ( TNameMapNode* htmp =
static_cast<TNameMapNode*
> (next()) ) {
1658 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1684 (*fUsingData).Delete();
1729 std::map<std::string, TObjArray*>::iterator it;
1730 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1731 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1741 Int_t ReadRulesContent(FILE *
f)
1753 while ((
c = fgetc(
f)) != EOF) {
1759 if (rule.Length() > 0) {
1811 static const char *suffix =
"class.rules";
1817 FILE *
f = fopen(sname,
"r");
1819 res = ReadRulesContent(
f);
1822 ::Error(
"TClass::ReadRules()",
"Cannot find rules file %s", sname.
Data());
1835 if (!filename || !filename[0]) {
1836 ::Error(
"TClass::ReadRules",
"no file name specified");
1840 FILE *
f = fopen(filename,
"r");
1842 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1845 Int_t count = ReadRulesContent(
f);
1898 ::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).",
1959 TAutoInspector insp(
b);
1960 obj->ShowMembers(insp);
1981 }
else if (actual !=
this) {
1982 return actual->
Browse(obj,
b);
1988 TAutoInspector insp(
b);
2031 isTransient =
kTRUE;
2036 TMmallocDescTemp setreset;
2047 static TClassRef clRefString(
"std::string");
2048 if (clRefString ==
this) {
2058 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
2064 TBuildRealData brd(pointer,
this);
2070 if ( isTransient ) {
2078 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2113 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2179 TMmallocDescTemp setreset;
2206 if (strcmp(
GetName(),
"string") == 0) {
2214 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2218 sinfo->CallShowMembers(obj, insp, isTransient);
2233 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2252 if (
this == TClonesArray::Class()) {
fCanSplit = 1;
return kTRUE; }
2266 if (element->IsA() == TStreamerBase::Class()) {
2297 }
else if (!
c->CanSplitBaseAllow()) {
2322 if (
this == TObject::Class()) { This->
fCanSplit = 1;
return kTRUE; }
2341 static TClassRef stdStringClass(
"std::string");
2342 if (valueClass==TString::Class() || valueClass==stdStringClass)
2398 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2399 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2429 copy->
fName = new_name;
2484 if (!padsav || !opt.
Contains(
"same")) {
2487 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2495 if (padsav) padsav->
cd();
2536 if (
sizeof(
this) == 4)
2539 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2542 if (
sizeof(
this) == 4)
2543 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2545 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2548 TDumpMembers dm(noAddr);
2550 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2560 static const UInt_t maxsize = 255;
2561 static char name[maxsize+2];
2565 for (
UInt_t i = 0; i < nch && icur < maxsize; ++i, ++icur) {
2566 if (
text[i] ==
'\"' ||
text[i] ==
'[' ||
text[i] ==
'~' ||
2569 text[i] ==
'?' ||
text[i] ==
'>') {
2599 if (
object==0)
return (
TClass*)
this;
2612 return realTObject->IsA();
2647 if (strcmp(
GetName(), classname) == 0)
return this;
2666 if (cl ==
this)
return this;
2678 if (cl ==
c)
return c;
2697 if (cl ==
this)
return 0;
2699 if (!
fBase.load()) {
2706 if (!sinfo)
return -1;
2712 for(
Int_t i=0; i<size; i++) {
2715 if (element->IsA() == TStreamerBase::Class()) {
2718 if (!baseclass)
return -1;
2720 if (subOffset == -2)
return -2;
2721 if (subOffset != -1)
return offset+subOffset;
2722 offset += baseclass->
Size();
2723 }
else if (element->IsA() == TStreamerSTL::Class()) {
2726 if (!baseclass)
return -1;
2728 if (subOffset == -2)
return -2;
2729 if (subOffset != -1)
return offset+subOffset;
2730 offset += baseclass->
Size();
2733 Error(
"GetBaseClassOffsetRecurse",
"Unexpected element type for base class: %s\n",element->IsA()->
GetName());
2745 if (
fBase.load() == 0)
2748 lnk =
fBase.load()->FirstLink();
2764 off =
c->GetBaseClassOffsetRecurse(cl);
2765 if (off == -2)
return -2;
2784 if (
this == toBase)
return 0;
2800 if(derived && base) {
2822 if (dm)
return this;
2831 if (cdm)
return cdm;
2842 struct TClassLocalStorage {
2843 TClassLocalStorage() : fCollectionProxy(0), fStreamer(0) {};
2848 static TClassLocalStorage *GetStorage(
const TClass *cl)
2854 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2861 local = (
ULong_t)
new TClassLocalStorage();
2864 return (TClassLocalStorage*)local;
2892 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2895 return local->fCollectionProxy;
2906 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2908 if (local->fStreamer==0) {
2910 const std::type_info &orig = (
typeid(*fStreamer) );
2911 if (!local->fStreamer) {
2912 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2914 const std::type_info © = (
typeid(*local->fStreamer) );
2915 if (strcmp(orig.name(),copy.name())!=0) {
2916 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2920 return local->fStreamer;
2966 if (strstr(
name,
"(anonymous)"))
return 0;
2967 if (strncmp(
name,
"class ",6)==0)
name += 6;
2968 if (strncmp(
name,
"struct ",7)==0)
name += 7;
2970 if (!
gROOT->GetListOfClasses())
return 0;
3025 if (!cl && !load)
return 0;
3027 TClass *loadedcl = (dict)();
3037 std::string normalizedName;
3046 if (normalizedName !=
name) {
3058 normalizedName = cl->
GetName();
3059 checkTable = load && (normalizedName !=
name);
3062 if (!load)
return 0;
3099 if (!loadedcl && !ispair && !ispairbase) {
3102 auto underlyingTypeName = theDataType->GetTypeName();
3105 if (underlyingTypeDict){
3106 loadedcl = underlyingTypeDict();
3112 if (loadedcl)
return loadedcl;
3116 if (loadedcl)
return loadedcl;
3123 if (hint_pair_offset && hint_pair_size) {
3131 static const size_t slen = strlen(
"pair");
3132 static const char *associativeContainer[] = {
"map",
"unordered_map",
"multimap",
3133 "unordered_multimap",
"set",
"unordered_set",
"multiset",
"unordered_multiset" };
3134 for(
auto contname : associativeContainer) {
3135 std::string collname = contname;
3136 collname.append( normalizedName.c_str() + slen );
3143 cl = p->GetValueClass();
3156 std::string::size_type posLess = normalizedName.find(
'<');
3157 if (posLess != std::string::npos) {
3164 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());
3166 if (normalizedName.length()) {
3176 auto ci =
gInterpreter->ClassInfo_Factory(normalizedName.c_str());
3178 auto method =
gInterpreter->MethodInfo_Factory(funcDecl);
3184 funcPtr(0, 0,
nullptr, &res);
3196 std::string alternative;
3197 gInterpreter->GetInterpreterTypeName(normalizedName.c_str(), alternative,
kTRUE);
3198 if (alternative.empty())
3200 const char *altname = alternative.c_str();
3201 if (strncmp(altname,
"std::", 5) == 0) {
3206 if (altname != normalizedName && strcmp(altname,
name) != 0) {
3233 if (!
gROOT->GetListOfClasses())
3241 if (cl && cl->
IsLoaded())
return cl;
3248 cl =
GetIdMap()->Find(typeinfo.name());
3267 if (!load)
return 0;
3277 TIter next(
gROOT->GetListOfClassGenerators());
3289 if (!autoload_old) {
3296 cl =
GetClass(typeinfo, load, hint_pair_offset, hint_pair_size);
3302 if (hint_pair_offset) {
3307 free(demangled_name);
3331 if (!
gROOT->GetListOfClasses())
return 0;
3352 if (!load)
return 0;
3358 if (loadedcl)
return loadedcl;
3383 if (!
gROOT->GetListOfClasses())
return 0;
3387 DeclIdMap_t::equal_range iter = map->Find(
id);
3388 if (iter.first == iter.second)
return false;
3389 std::vector<TClass*>::iterator vectIt = classes.begin();
3390 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3391 vectIt = classes.insert(vectIt, it->second);
3419 || datamember == 0)
return 0;
3422 const char *start_name = datamember;
3423 while (*start_name ==
'*') ++start_name;
3428 if (
const char *s = strchr(start_name,
'[')){
3429 UInt_t len = s-start_name;
3458 if (strchr(
name,
'[')==0) {
3500 std::string givenName(
name);
3503 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3504 if (firstBracket != std::string::npos) {
3506 std::string nameNoDim(givenName.substr(0, firstBracket));
3510 std::string objName(obj->
GetName());
3511 std::string::size_type pos = objName.find_first_of(
"[");
3513 if (pos != std::string::npos) {
3515 if (objName == nameNoDim) {
3524 std::ostringstream ptrname;
3525 ptrname <<
"*" << givenName;
3532 std::string::size_type firstDot = givenName.find_first_of(
".");
3533 if (firstDot == std::string::npos) {
3544 std::string::size_type lastDot = givenName.find_last_of(
".");
3545 std::ostringstream starname;
3546 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3562 std::string::size_type bracket = starname.str().find_first_of(
"[");
3563 if (bracket != std::string::npos) {
3572 std::string firstDotName(givenName.substr(firstDot + 1));
3615 if (!
fBase.load()) {
3636 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3639 if (!
fBase.load()) {
3665 auto temp =
fEnums.load();
3667 if (requestListLoading) {
3672 }
else if ( temp->IsA() == TListOfEnumsWithLock::Class() ) {
3682 if (!requestListLoading) {
3737 if (!(*data).IsLoaded())
3740 }
else if (load) (*data).Load();
3751 auto data =
fData.load();
3752 if (data && data->IsLoaded())
3754 }
else if (!load &&
fData)
3795 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3828 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3858 while ((baseClass = (
TBaseClass *) nextBase())) {
3866 while ((method = (
TMethod*)next())) {
3872 if (
m &&
m->GetNargs() == method->
GetNargs())
3897 return cl->IsLoaded();
3925 TIter nextMemb(ldm);
3956 for (
int i = 0; i < 2; i++) {
3972 if (
this == sCIString)
return;
3984 auto checkDicts = [&](
const string &clName){
3991 if (cl && !cl->HasDictionary()) {
3992 cl->GetMissingDictionariesWithRecursionCheck(result, visited, recurse);
3996 const auto &elements = splitType.
fElements;
3997 const auto &templName = elements[0];
4000 if (templName ==
"pair") {
4008 if (templName ==
"unique_ptr" || templName ==
"array") {
4009 checkDicts(elements[1]);
4016 if (templName ==
"tuple") {
4019 const auto nTemplArgs = elements.size() - 1;
4021 for (
auto iTemplArg = 1U; iTemplArg < nTemplArgs; ++iTemplArg) {
4022 checkDicts(elements[iTemplArg]);
4071 if (
this == sCIString)
return;
4080 if (strncmp(
fName,
"unique_ptr<", 11) == 0 || strncmp(
fName,
"array<", 6) == 0 || strncmp(
fName,
"tuple<", 6) == 0) {
4133 while ((acl = (
TClass*)nextClass())) {
4134 if (acl == newcl)
continue;
4139 info->
Update(
this, newcl);
4151 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
4200 (*fUsingData).Unload();
4204 (*fMethod).Unload();
4238 if (options==0 || options[0]==0)
return;
4240 if (strstr(options,
"streamerinfo")!=0) {
4244 std::map<std::string, TObjArray*>::iterator it;
4245 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
4246 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
4247 it->second->ls(options);
4274 TIter next(methodList);
4276 while ((method = (
TMethod*) next())) {
4278 if (classPtr != method->
GetClass()) {
4286 TIter nextarg(margsList);
4287 while ((methodArg = (
TMethodArg*)nextarg())) {
4337 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4395 Fatal(
"GetMethod",
"gInterpreter not initialized");
4401 if (!decl)
return 0;
4408 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4409 method,params,objectIsConst ?
"const " :
"",
GetName());
4419 return static_cast<TMethod *
>(method);
4423 if (
TFunction* method = base->FindClassOrBaseMethodWithId(declId))
4424 return static_cast<TMethod *
>(method);
4441 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4445 objectIsConst, mode);
4447 if (!decl)
return 0;
4450 Error(
"GetMethodWithPrototype",
4451 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4452 method,
proto,objectIsConst ?
"const " :
"",
GetName());
4467 if (faddr == (
Long_t)
m->InterfaceMethod())
4486 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4492 if (!decl)
return 0;
4512 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4519 if (!decl)
return 0;
4618 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4637 TMmallocDescTemp setreset;
4646 sinfo->
Build(silent);
4691 newname +=
"@@emulated";
4716 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4729 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4754 newname +=
"@@emulated";
4769 if (!sinfo && (checksum !=
fCheckSum)) {
4779 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4792 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4839 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4865 if (cl ==
this)
return kTRUE;
4873 if (element->IsA() == TStreamerBase::Class()) {
4875 if (!clbase)
return kFALSE;
4894 if (cl ==
this)
return obj;
4901 return (
void*)((
Long_t)obj+off);
4903 return (
void*)((
Long_t)obj-off);
4957 auto obj =
NewObject(defConstructor, quiet);
4958 if (obj.GetPtr() && obj.GetAllocator()) {
4962 return obj.GetPtr();
4979 TClass__GetCallingNewRAII callingNew(defConstructor);
4984 Error(
"New",
"cannot create object of class %s",
GetName());
4996 TClass__GetCallingNewRAII callingNew(defConstructor);
5001 Error(
"New",
"cannot create object of class %s",
GetName());
5008 TClass__GetCallingNewRAII callingNew(defConstructor);
5013 Error(
"New",
"cannot create object of class %s",
GetName());
5041 TClass__GetCallingNewRAII callingNew(defConstructor);
5042 p = { sinfo->
New(), sinfo};
5052 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
5057 Fatal(
"New",
"This cannot happen!");
5070 auto obj =
NewObject(arena, defConstructor);
5071 if (obj.GetPtr() && obj.GetAllocator()) {
5075 return obj.GetPtr();
5093 TClass__GetCallingNewRAII callingNew(defConstructor);
5097 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5109 TClass__GetCallingNewRAII callingNew(defConstructor);
5113 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5120 TClass__GetCallingNewRAII callingNew(defConstructor);
5142 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5147 TClass__GetCallingNewRAII callingNew(defConstructor);
5148 p = { sinfo->
New(arena), sinfo };
5158 Error(
"New with placement",
"This cannot happen!");
5173 if (obj.GetPtr() && obj.GetAllocator()) {
5177 return obj.GetPtr();
5196 TClass__GetCallingNewRAII callingNew(defConstructor);
5212 TClass__GetCallingNewRAII callingNew(defConstructor);
5223 TClass__GetCallingNewRAII callingNew(defConstructor);
5250 TClass__GetCallingNewRAII callingNew(defConstructor);
5251 p = { sinfo->
NewArray(nElements), sinfo };
5261 Error(
"NewArray",
"This cannot happen!");
5275 if (obj.GetPtr() && obj.GetAllocator()) {
5279 return obj.GetPtr();
5297 TClass__GetCallingNewRAII callingNew(defConstructor);
5301 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5313 TClass__GetCallingNewRAII callingNew(defConstructor);
5317 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5324 TClass__GetCallingNewRAII callingNew(defConstructor);
5346 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5351 TClass__GetCallingNewRAII callingNew(defConstructor);
5352 p = { sinfo->
NewArray(nElements, arena), sinfo };
5368 Error(
"NewArray with placement",
"This cannot happen!");
5380 if (obj == 0)
return;
5387 }
else if ((!dtorOnly) &&
fDelete) {
5430 objVer = iter->second;
5432 currentVersion =
kTRUE;
5439 if (!inRepo || currentVersion) {
5446 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5452 Error(
"Destructor",
"Doing Dump() ...");
5465 Error(
"Destructor",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5472 Error(
"Destructor2",
"Doing Dump() ...");
5483 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5509 if (ary == 0)
return;
5516 Error(
"DeleteArray",
"Destructor only is not supported!");
5555 objVer = iter->second;
5557 currentVersion =
kTRUE;
5564 if (!inRepo || currentVersion) {
5571 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5577 Error(
"DeleteArray",
"Doing Dump() ...");
5590 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5597 Error(
"DeleteArray",
"Doing Dump() ...");
5609 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5619 if (obj.
GetPtr() == 0)
return;
5695 char *s =
new char[maxsize];
5699 b.ReadString(s, maxsize);
5700 while (strlen(s) == (maxsize - 1)) {
5702 b.SetBufferOffset(pos);
5703 maxsize = 2*maxsize;
5705 s =
new char[maxsize];
5706 b.ReadString(s, maxsize);
5711 ::Error(
"TClass::Load",
"dictionary of class %s not found", s);
5735 if (result)
return result;
5783 TIter next(
gROOT->GetListOfClassGenerators());
5810 bool autoParse = !
gInterpreter->IsAutoParsingSuspended();
5824 ::Error(
"TClass::LoadClassInfo",
"no interpreter information for class %s is available"
5825 " even though it has a TClass initialization routine.",
5848 const char *dfil,
const char *ifil,
5853 TMmallocDescTemp setreset;
5854 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5862 const char *dfil,
const char *ifil,
5867 TMmallocDescTemp setreset;
5868 return new TClass(cname,
id, dfil, ifil, dl, il);
5974 The class %s transitioned from not having a specified class version\n\
5975 to having a specified class version (the current class version is %d).\n\
5976 However too many different non-versioned layouts of the class have\n\
5977 already been loaded so far. To work around this problem you can\n\
5978 load fewer 'old' file in the same ROOT session or load the C++ library\n\
5979 describing the class %s before opening the files or increase the version\n\
5980 number of the class for example ClassDef(%s,%d).\n\
5981 Do not try to write objects with the current class definition,\n\
5982 the files might not be readable.\n",
5986 The StreamerInfo version %d for the class %s which was read\n\
5987 from a file previously opened has the same version as the active class\n\
5988 but a different checksum. You should update the version to ClassDef(%s,%d).\n\
5989 Do not try to write objects with the current class definition,\n\
5990 the files will not be readable.\n"
6001 if (strncmp(
GetName(),
"map<", 4) == 0)
6003 else if (strncmp(
GetName(),
"multimap<", 9) == 0)
6005 else if (strncmp(
GetName(),
"unordered_map<", 14) == 0)
6007 else if (strncmp(
GetName(),
"unordered_multimap<", 19) == 0)
6010 std::string pairname(
"pair");
6011 pairname.append(
GetName() + noffset);
6013 if ( pcl && !pcl->IsLoaded() && !pcl->IsSyntheticPair() )
6019 while (
auto acl = (
TClass*)nextClass()) {
6020 if (acl ==
this)
continue;
6021 if (acl->fCollectionProxy && acl->fCollectionProxy->GetValueClass() == pcl) {
6022 acl->fCollectionProxy->Reset();
6026 TIter next(pcl->GetStreamerInfos());
6029 info->
Clear(
"build");
6081 TMmallocDescTemp setreset;
6296 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
6320 (*fMethod).Unload();
6326 (*fUsingData).Unload();
6332 if (fState <= kForwardDeclared && !fStreamerInfo->IsEmpty()) {
6425 //info is empty. Let's build the default Streamer descriptor
6427 char *temp = new char[10000];
6431 //add list of base classes
6432 TIter nextb(GetListOfBases());
6434 while ((base = (TBaseClass*) nextb())) {
6435 snprintf(local,100,"%s;",base->GetName());
6436 strlcat(temp,local,10000);
6439 //add list of data members and types
6440 TIter nextd(GetListOfDataMembers());
6441 while ((dm = (TDataMember *) nextd())) {
6442 if (dm->IsEnum()) continue;
6443 if (!dm->IsPersistent()) continue;
6444 Long_t property = dm->Property();
6445 if (property & kIsStatic) continue;
6446 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
6449 if (acl->GetClassVersion() == 0) continue;
6452 // dm->GetArrayIndex() returns an empty string if it does not
6454 const char * index = dm->GetArrayIndex();
6455 if (strlen(index)==0)
6456 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
6458 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
6459 strlcat(temp,local,10000);
6461 //fStreamerInfo = temp;
6550 for (
int i=0; i<il; i++)
id =
id*3+
name[i];
6559 TIter nextBase(tlb);
6568 for (
int i=0; i<il; i++)
id =
id*3+
name[i];
6571 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6580 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6582 TIter nextMemb(tlm);
6598 for (i=0; i<il; i++)
id =
id*3+
name[i];
6610 type.ReplaceAll(
"ULong64_t",
"unsigned long long");
6611 type.ReplaceAll(
"Long64_t",
"long long");
6612 type.ReplaceAll(
"<signed char",
"<char");
6613 type.ReplaceAll(
",signed char",
",char");
6614 if (
type==
"signed char")
type =
"char";
6626 for (i=0; i<il; i++)
id =
id*3+
type[i];
6630 for (
int ii=0;ii<dim;ii++)
id =
id*3+tdm->
GetMaxIndex(ii);
6637 left = strstr(tdm->
GetTitle(),
"[");
6639 const char *right = strstr(left,
"]");
6642 while (left != right) {
6734 return b.ReadClassBuffer(
this,pointer,version,start,count);
6743 return b.ReadClassBuffer(
this,pointer);
6755 b.WriteClassBuffer(
this,pointer);
6768 streamer->
Stream(
b,
object,onfile_class);
6800 if (
b.IsReading()) {
6801 b.ReadClassEmulated(pThis,
object, onfile_class);
6803 b.WriteClassBuffer(pThis,
object);
6834 if (
b.IsReading()) {
6835 b.ReadClassBuffer(pThis,
object, onfile_class);
6839 b.WriteClassBuffer(pThis,
object);
6858 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
7022 for (
Int_t i=-1;i<ninfos;++i) {
7044 for (
Int_t i=-1;i<ninfos;i++) {
7048 if (!info)
continue;
7089 std::map<std::string, TObjArray*>::iterator it;
7092 it = (*fConversionStreamerInfo).find( cl->
GetName() );
7094 if( it != (*fConversionStreamerInfo).end() ) {
7098 if( arr && version >= -1 && version < arr->GetSize() && arr->
At( version ) )
7110 if( version >= -1 && version < clSI->GetSize() )
7153 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
7156 Error(
"GetConversionStreamerInfo",
"Conversion StreamerInfo from %s to %s version %d has already been created",
7197 std::map<std::string, TObjArray*>::iterator it;
7201 it = (*fConversionStreamerInfo).find( cl->
GetName() );
7203 if( it != (*fConversionStreamerInfo).end() ) {
7259 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
7278 Error(
"RegisterStreamerInfo",
7279 "Register StreamerInfo for %s on non-empty slot (%d).",
7323 static const char *handVerified[] = {
7324 "TEnvRec",
"TDataType",
"TObjArray",
"TList",
"THashList",
7325 "TClass",
"TCling",
"TInterpreter",
"TMethod",
"ROOT::Internal::TCheckHashRecursiveRemoveConsistency",
7326 "TCheckHashRecursiveRemoveConsistency",
"TGWindow",
7327 "TDirectory",
"TDirectoryFile",
"TObject",
"TH1",
7328 "TQClass",
"TGlobal" };
7330 if (cname && cname[0]) {
7331 for (
auto cursor : handVerified) {
7332 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 TVirtualMutex * gInterpreterMutex
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
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
Return the wrapper around the destructor.
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 TListOfFunctionTemplates for 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
Return the wrapper around the directory auto add function.
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
Return the wrapper around new ThisClass().
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
Return the wrapper around delete [] ThiObject.
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
Return the wrapper around new ThisClass[].
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
Return the wrapper around Merge.
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
Returns true if this class has an definition and/or overload of the member function Hash.
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
Return true if we have access to a constructor usable for I/O.
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
Return the wrapper around delete ThiObject.
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
Return the wrapper around Merge.
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.: "class TDirectory*" -> "TDirectory".
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.
Mother of all ROOT objects.
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.
Int_t GetArrayDim() const
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 Delete(Option_t *option="")
Delete is not allowed in this class.
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 DrawClassObject(const TObject *obj, Option_t *option="")=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
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>
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)
TMatrixT< Element > & Add(TMatrixT< Element > &target, Element scalar, const TMatrixT< Element > &source)
Modify addition: target += scalar * source.
bool IsTemplate()
Check if the type is a template.
std::vector< std::string > fElements
TVirtualStreamerInfo * GetAllocator() const