100 #define RTLD_DEFAULT ((void *)::GetModuleHandle(NULL)) 101 #define dlsym(library, function_name) ::GetProcAddress((HMODULE)library, function_name) 126 class TMmallocDescTemp {
130 TMmallocDescTemp(
void *value = 0) :
157 auto strLen = strlen(name);
158 if (strLen == 0)
return;
160 const char* endCharPtr = strchr(name,
'<');
161 endCharPtr = !endCharPtr ? &name[strLen] : endCharPtr;
163 const char* beginCharPtr = endCharPtr;
164 while (beginCharPtr!=name){
165 if (*beginCharPtr==
':'){
171 beginCharPtr = beginCharPtr!=endCharPtr ? beginCharPtr :
name;
172 std::string
s(beginCharPtr, endCharPtr);
174 printf(
"TDeclNameRegistry::AddQualifiedName Adding key %s for class/namespace %s\n", s.c_str(),
name);
196 printf(
"TDeclNameRegistry Destructor. List of %lu names:\n",
199 printf(
" - %s\n", key.c_str());
230 struct ObjRepoValue {
231 ObjRepoValue(
const TClass *what,
Version_t version) : fClass(what),fVersion(version) {}
256 std::pair<RepoCont_t::iterator, Bool_t> tmp =
gObjectVersionRepository.insert(RepoCont_t::value_type>(location, RepoCont_t::mapped_type(what,version)));
258 Warning(where,
"Reregistering an object of class '%s' version %d at address %p", what->
GetName(), version, p);
262 Warning(where,
"Failed to reregister an object of class '%s' version %d at address %p", what->
GetName(), version, location);
275 RepoCont_t::iterator tmp = cur++;
276 if ((tmp->first == location) && (tmp->second.fVersion == what->
GetClassVersion())) {
292 size_t objsize = what->
Size();
293 long delta = (
char*)newadd - (
char*)oldadd;
297 RepoCont_t::iterator tmp = cur++;
298 if (oldadd <= tmp->
first && tmp->first < ( ((
char*)oldadd) + objsize) ) {
301 gObjectVersionRepository.insert(RepoCont_t::value_type(((
char*)tmp->first)+delta, RepoCont_t::mapped_type(tmp->second.fClass,tmp->second.fVersion)));
314 #define R__USE_STD_MAP 315 class TMapTypeToTClass {
316 #if defined R__USE_STD_MAP 320 typedef std::map<std::string,TClass*>
IdMap_t;
321 typedef IdMap_t::key_type key_type;
322 typedef IdMap_t::const_iterator const_iterator;
323 typedef IdMap_t::size_type size_type;
326 typedef TClass* mapped_type;
328 typedef IdMap_t::mapped_type mapped_type;
335 void Add(
const key_type &key, mapped_type &obj)
340 mapped_type
Find(
const key_type &key)
const 343 IdMap_t::const_iterator iter = fMap.find(key);
345 if (iter != fMap.end()) cl = iter->second;
348 void Remove(
const key_type &key) {
357 #ifdef R__COMPLETE_MEM_TERMINATION 366 void Add(
const char *key,
TClass *&obj) {
368 fMap.
Add(realkey, obj);
375 void Remove(
const char *key) {
383 class TMapDeclIdToTClass {
386 typedef multimap<TDictionary::DeclId_t, TClass*>
DeclIdMap_t;
387 typedef DeclIdMap_t::key_type key_type;
388 typedef DeclIdMap_t::mapped_type mapped_type;
389 typedef DeclIdMap_t::const_iterator const_iterator;
390 typedef std::pair <const_iterator, const_iterator> equal_range;
391 typedef DeclIdMap_t::size_type size_type;
397 void Add(
const key_type &key, mapped_type obj)
400 std::pair<const key_type, mapped_type> pair = make_pair(key, obj);
403 size_type CountElementsWithKey(
const key_type &key)
405 return fMap.count(key);
407 equal_range
Find(
const key_type &key)
const 410 return fMap.equal_range(key);
412 void Remove(
const key_type &key) {
421 #ifdef R__COMPLETE_MEM_TERMINATION 423 return &gIdMapObject;
432 #ifdef R__COMPLETE_MEM_TERMINATION 434 return &gDeclIdMapObject;
449 gROOT->GetListOfClasses()->Add(cl);
463 if (!cl || !
id)
return;
475 gROOT->GetListOfClasses()->Remove(oldcl);
507 TDumpMembers(
bool noAddr): fNoAddr(noAddr) { }
524 void TDumpMembers::Inspect(
TClass *cl,
const char *pname,
const char *mname,
const void *add,
Bool_t )
526 const Int_t kvalue = 30;
528 const Int_t ktitle = 50;
530 const Int_t ktitle = 42;
532 const Int_t kline = 1024;
540 const char *memberName;
541 const char *memberFullTypeName;
542 const char *memberTitle;
547 if (member->GetDataType()) {
548 memberDataType = (
EDataType)member->GetDataType()->GetType();
550 memberName = member->GetName();
551 memberFullTypeName = member->GetFullTypeName();
552 memberTitle = member->GetTitle();
553 isapointer = member->IsaPointer();
554 isbasic = member->IsBasic();
561 const char *cursor = mname;
562 while ( (*cursor)==
'*' ) ++cursor;
563 TString elname( cursor );
564 Ssiz_t pos = elname.Index(
"[");
565 if ( pos !=
kNPOS ) {
566 elname.Remove( pos );
569 if (!element)
return;
574 memberName = element->
GetName();
577 membertype =
gROOT->GetType(memberFullTypeName);
579 isbasic = membertype !=0;
586 if (strcmp(memberName,
"fDatime") == 0 && memberDataType ==
kUInt_t) {
590 if (strcmp(memberName,
"fBits") == 0 && memberDataType ==
kUInt_t) {
595 static TClassRef stdClass(
"std::string");
596 Bool_t isStdString = (dataClass == stdClass);
599 for (i = 0;i < kline; i++) line[i] =
' ';
601 snprintf(line,kline,
"%s%s ",pname,mname);
602 i = strlen(line); line[i] =
' ';
605 char *pointer = (
char*)add;
606 char **ppointer = (
char**)(pointer);
609 char **p3pointer = (
char**)(*ppointer);
611 snprintf(&line[kvalue],kline-kvalue,
"->0");
616 }
else if (membertype) {
618 i = strlen(*ppointer);
619 if (kvalue+i > kline) i=kline-1-kvalue;
621 for (
Int_t j = 0; j < i; j++) {
622 if (!std::isprint((*ppointer)[j])) {
628 strncpy(line + kvalue, *ppointer, i);
634 strncpy(&line[kvalue], membertype->
AsString(p3pointer),
TMath::Min(kline-1-kvalue,(
int)strlen(membertype->
AsString(p3pointer))));
636 }
else if (!strcmp(memberFullTypeName,
"char*") ||
637 !strcmp(memberFullTypeName,
"const char*")) {
638 i = strlen(*ppointer);
639 if (kvalue+i >= kline) i=kline-1-kvalue;
641 for (
Int_t j = 0; j < i; j++) {
642 if (!std::isprint((*ppointer)[j])) {
648 strncpy(line + kvalue, *ppointer, i);
658 }
else if (membertype) {
660 cdatime = (
UInt_t*)pointer;
662 snprintf(&line[kvalue],kline-kvalue,
"%d/%d",cdate,ctime);
670 std::string *str = (std::string*)pointer;
671 snprintf(&line[kvalue],kline-kvalue,
"%s",str->c_str());
672 }
else if (isTString) {
673 TString *str = (TString*)pointer;
674 snprintf(&line[kvalue],kline-kvalue,
"%s",str->Data());
682 if (isdate ==
kFALSE && strcmp(memberFullTypeName,
"char*") && strcmp(memberFullTypeName,
"const char*")) {
683 i = strlen(&line[0]); line[i] =
' ';
684 Int_t lentit = strlen(memberTitle);
685 if (lentit > 250-ktitle) lentit = 250-ktitle;
686 strncpy(&line[ktitle],memberTitle,lentit);
687 line[ktitle+lentit] = 0;
709 void *fRealDataObject;
713 TBuildRealData(
void *obj,
TClass *cl) {
715 fRealDataObject = obj;
726 void TBuildRealData::Inspect(
TClass* cl,
const char* pname,
const char* mname,
const void* add,
Bool_t isTransient)
738 isTransientMember =
kTRUE;
742 TString rname( pname );
745 if (cl != fRealDataClass) {
746 if (!fRealDataClass->InheritsFrom(cl)) {
747 Ssiz_t dot = rname.Index(
'.');
752 if (!fRealDataClass->GetDataMember(rname)) {
767 if (!fRealDataClass->GetBaseDataMember(rname)) {
782 fRealDataClass->GetListOfRealData()->Add(rd);
792 fRealDataClass->GetListOfRealData()->Add(rd);
837 void* addrForRecursion = 0;
838 if (GetObjectValidity() == kValidObjectGiven)
839 addrForRecursion =
const_cast<void*
>(add);
846 fRealDataClass->GetListOfRealData()->Add(rd);
863 fBrowser =
b; fCount = 0; }
864 virtual ~TAutoInspector() { }
867 virtual Bool_t IsTreatingNonAccessibleTypes() {
return kFALSE;}
873 void TAutoInspector::Inspect(
TClass *cl,
const char *tit,
const char *
name,
874 const void *addr,
Bool_t )
876 if(tit && strchr(tit,
'.')) return ;
877 if (fCount && !fBrowser)
return;
884 int ln = strcspn(
name,
"[ ");
885 TString iname(
name,ln);
888 if (!classInfo)
return;
897 mname.ReplaceAll(
"*",
"");
898 if ((found = (iname==mname)))
break;
910 if (mname ==
"G__virtualinfo")
return;
912 int size =
sizeof(
void*);
932 for(
int i=0; i<nmax; i++) {
934 char *ptr = (
char*)addr + i*size;
941 if (!fBrowser)
return;
949 bwname = actualClass->
GetName();
955 bwname.Length()==0 ||
956 strcmp(bwname.Data(),actualClass->
GetName())==0) {
958 int l = strcspn(bwname.Data(),
"[ ");
959 if (l<bwname.Length() && bwname[
l]==
'[') {
960 char cbuf[13];
snprintf(cbuf,13,
"[%02d]",i);
961 ts.Replace(0,999,bwname,l);
963 bwname = (
const char*)ts;
969 fBrowser->Add(obj,clm,bwname);
976 fBrowser->Add( obj, clm, bwname );
982 int sz = proxy->
Size();
984 char fmt[] = {
"#%09d"};
985 fmt[3] =
'0'+(int)
log10(
double(sz))+1;
987 for (
int ii=0;ii<sz;ii++) {
988 void *p = proxy->
At(ii);
1000 fBrowser->Add( p, actualCl, ts );
1039 TMmallocDescTemp setreset;
1075 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1078 TMmallocDescTemp setreset;
1085 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1089 ::
Warning(
"TClass::TClass",
"no dictionary for class %s is available", name);
1120 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1156 "A TClass entry cannot be initialized in a state different from kForwardDeclared or kEmulated.");
1157 Init(name, cversion, 0, 0, 0, 0, -1, -1, 0, silent);
1193 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1199 ::Fatal(
"TClass::TClass",
"gInterpreter not initialized");
1201 if (!classInfo || !
gInterpreter->ClassInfo_IsValid(classInfo)) {
1208 Init(
fName, cversion, 0, 0, dfil, ifil, dl, il, classInfo, silent);
1241 Init(name,cversion, 0, 0, dfil, ifil, dl, il, 0, silent);
1250 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1273 Init(name, cversion, &info, isa, dfil, ifil, dl, il, 0, silent);
1291 info->
Clear(
"build");
1307 const char *dfil,
const char *ifil,
Int_t dl,
Int_t il,
1308 ClassInfo_t *givenInfo,
1312 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
1313 if (!name || !name[0]) {
1314 ::Error(
"TClass::Init",
"The name parameter is invalid (null or empty)");
1348 TClass **persistentRef = 0;
1366 info->
Clear(
"build");
1385 ::Fatal(
"TClass::Init",
"gInterpreter not initialized");
1388 bool invalid = !
gInterpreter->ClassInfo_IsValid(givenInfo);
1389 bool notloaded = !
gInterpreter->ClassInfo_IsLoaded(givenInfo);
1390 auto property =
gInterpreter->ClassInfo_Property(givenInfo);
1392 if (invalid || (notloaded && (property &
kIsNamespace)) ||
1455 ::Error(
"TClass::Init",
"no interpreter information for class %s is available even though it has a TClass " 1456 "initialization routine.",
1462 ::Warning(
"TClass::Init",
"no dictionary for class %s is available",
fName.Data());
1473 TString resolvedThis;
1474 if (!givenInfo && strchr (name,
'<')) {
1475 if (
fName != name) {
1486 if (resolvedThis != name) {
1510 if (resolvedThis !=
fName) {
1511 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(resolvedThis);
1512 if (oldcl && oldcl !=
this) {
1518 while (
TNameMapNode* htmp = static_cast<TNameMapNode*> (next()) ) {
1519 if (resolvedThis != htmp->String())
continue;
1520 oldcl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(htmp->fOrigName);
1521 if (oldcl && oldcl !=
this) {
1539 if (persistentRef) {
1546 if ( isStl || !strncmp(
GetName(),
"stdext::hash_",13) || !strncmp(
GetName(),
"__gnu_cxx::hash_",16) ) {
1557 }
else if (!silent) {
1558 Warning(
"Init",
"Collection proxy for %s was not properly initialized!",
GetName());
1564 }
else if (!strncmp(
GetName(),
"std::pair<",10) || !strncmp(
GetName(),
"pair<",5) ) {
1583 while (
TNameMapNode* htmp = static_cast<TNameMapNode*> (next()) ) {
1584 if (resolvedThis == htmp->String() && htmp->fOrigName ==
GetName()) {
1651 std::map<std::string, TObjArray*>::iterator it;
1652 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
1653 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
1663 Int_t ReadRulesContent(FILE *f)
1675 while ((c = fgetc(f)) != EOF) {
1681 if (rule.Length() > 0) {
1733 static const char *suffix =
"class.rules";
1734 TString sname = suffix;
1739 FILE * f = fopen(sname,
"r");
1741 res = ReadRulesContent(f);
1744 ::Error(
"TClass::ReadRules()",
"Cannot find rules file %s", sname.Data());
1757 if (!filename || !filename[0]) {
1758 ::Error(
"TClass::ReadRules",
"no file name specified");
1762 FILE * f = fopen(filename,
"r");
1764 ::Error(
"TClass::ReadRules",
"Failed to open %s\n",filename);
1767 Int_t count = ReadRulesContent(f);
1820 ::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).",
1881 TAutoInspector insp(b);
1882 obj->ShowMembers(insp);
1903 }
else if (actual !=
this) {
1904 return actual->
Browse(obj, b);
1910 TAutoInspector insp(b);
1953 isTransient =
kTRUE;
1958 TMmallocDescTemp setreset;
1969 static TClassRef clRefString(
"std::string");
1970 if (clRefString ==
this) {
1979 && strncmp(
GetName(),
"pair<", 5) != 0) {
1980 Error(
"BuildRealData",
"Inspection for %s not supported!",
GetName());
1986 TBuildRealData brd(pointer,
this);
1992 if ( isTransient ) {
2000 Error(
"BuildRealData",
"Cannot find any ShowMembers function for %s!",
GetName());
2035 Error(
"BuildEmulatedRealData",
"Missing StreamerInfo for %s",
GetName());
2044 Long_t eoffset = element->GetOffset();
2045 TClass *cle = element->GetClassPointer();
2054 TString rdname; rdname.Form(
"%s%s",name,element->GetFullName());
2059 rdname.Form(
"%s%s.",name,element->GetFullName());
2063 TString rdname; rdname.Form(
"%s%s",name,element->GetFullName());
2077 Int_t etype = element->GetType();
2080 Long_t eoffset = element->GetOffset();
2081 TClass *cle = element->GetClassPointer();
2101 TMmallocDescTemp setreset;
2128 if (strcmp(
GetName(),
"string") == 0) {
2136 gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2140 sinfo->CallShowMembers(obj, insp, isTransient);
2155 return gInterpreter->InspectMembers(insp, obj,
this, isTransient);
2189 TClass *clbase = element->GetClassPointer();
2263 static TClassRef stdStringClass(
"std::string");
2328 if (new_name == 0 || new_name[0]==
'\0' ||
fName == new_name) {
2329 Error(
"Clone",
"The name of the class must be changed when cloning a TClass object.");
2359 copy->
fName = new_name;
2414 if (!padsav || !opt.Contains(
"same")) {
2417 gROOT->ProcessLine(
"new TCanvas(\"R__class\",\"class\",20,20,1000,750);");
2423 if (
gPad)
gPad->DrawClassObject(
this,option);
2425 if (padsav) padsav->
cd();
2466 if (
sizeof(
this) == 4)
2469 Printf(
"==> Dumping object at: 0x%016lx, name=%s, class=%s\n",prObj,tobj->
GetName(),
GetName());
2472 if (
sizeof(
this) == 4)
2473 Printf(
"==> Dumping object at: 0x%08lx, class=%s\n",prObj,
GetName());
2475 Printf(
"==> Dumping object at: 0x%016lx, class=%s\n",prObj,
GetName());
2478 TDumpMembers dm(noAddr);
2480 Info(
"Dump",
"No ShowMembers function, dumping disabled");
2490 static const UInt_t maxsize = 255;
2491 static char name[maxsize+2];
2493 UInt_t nch = strlen(text);
2495 for (
UInt_t i = 0; i < nch && icur < maxsize; ++i, ++icur) {
2496 if (text[i] ==
'\"' || text[i] ==
'[' || text[i] ==
'~' ||
2497 text[i] ==
']' || text[i] ==
'&' || text[i] ==
'#' ||
2498 text[i] ==
'!' || text[i] ==
'^' || text[i] ==
'<' ||
2499 text[i] ==
'?' || text[i] ==
'>') {
2503 name[icur] = text[i];
2529 if (
object==0)
return (
TClass*)
this;
2531 return (*
fIsA)(object);
2542 return realTObject->IsA();
2559 return (*
fIsA)(object);
2577 if (strcmp(
GetName(), classname) == 0)
return this;
2596 if (cl ==
this)
return this;
2608 if (cl == c)
return c;
2627 if (cl ==
this)
return 0;
2629 if (!
fBase.load()) {
2636 if (!sinfo)
return -1;
2642 for(
Int_t i=0; i<size; i++) {
2648 if (!baseclass)
return -1;
2650 if (subOffset == -2)
return -2;
2651 if (subOffset != -1)
return offset+subOffset;
2652 offset += baseclass->
Size();
2656 if (!baseclass)
return -1;
2658 if (subOffset == -2)
return -2;
2659 if (subOffset != -1)
return offset+subOffset;
2660 offset += baseclass->
Size();
2663 Error(
"GetBaseClassOffsetRecurse",
"Unexpected element type for base class: %s\n",element->IsA()->
GetName());
2675 if (
fBase.load() == 0)
2678 lnk =
fBase.load()->FirstLink();
2695 if (off == -2)
return -2;
2714 if (
this == toBase)
return 0;
2730 if(derived && base) {
2752 if (dm)
return this;
2761 if (cdm)
return cdm;
2772 struct TClassLocalStorage {
2778 static TClassLocalStorage *GetStorage(
const TClass *cl)
2784 if (*thread_ptr==0) *thread_ptr =
new TExMap();
2791 local = (
ULong_t)
new TClassLocalStorage();
2794 return (TClassLocalStorage*)local;
2822 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2825 return local->fCollectionProxy;
2836 TClassLocalStorage *local = TClassLocalStorage::GetStorage(
this);
2838 if (local->fStreamer==0) {
2840 const std::type_info &orig = (
typeid(*fStreamer) );
2841 if (!local->fStreamer) {
2842 Warning(
"GetStreamer",
"For %s, the TClassStreamer (%s) passed's call to Generate failed!",
GetName(),orig.name());
2844 const std::type_info © = (
typeid(*local->fStreamer) );
2845 if (strcmp(orig.name(),copy.name())!=0) {
2846 Warning(
"GetStreamer",
"For %s, the TClassStreamer passed does not properly implement the Generate method (%s vs %s)\n",
GetName(),orig.name(),copy.name());
2850 return local->fStreamer;
2889 if (!name || !name[0])
return 0;
2891 if (strstr(name,
"(anonymous)"))
return 0;
2892 if (strncmp(name,
"class ",6)==0) name += 6;
2893 if (strncmp(name,
"struct ",7)==0) name += 7;
2895 if (!
gROOT->GetListOfClasses())
return 0;
2911 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(name);
2941 if (!cl && !load)
return 0;
2943 TClass *loadedcl = (dict)();
2953 std::string normalizedName;
2961 if (normalizedName != name) {
2962 cl = (
TClass*)
gROOT->GetListOfClasses()->FindObject(normalizedName.c_str());
2973 normalizedName = cl->
GetName();
2974 checkTable = load && (normalizedName !=
name);
2977 if (!load)
return 0;
3003 if (
TDataType* theDataType =
gROOT->GetType(normalizedName.c_str())){
3005 auto underlyingTypeName = theDataType->GetTypeName();
3008 if (underlyingTypeDict){
3009 loadedcl = underlyingTypeDict();
3015 if (loadedcl)
return loadedcl;
3019 if (loadedcl)
return loadedcl;
3032 std::string::size_type posLess = normalizedName.find(
'<');
3033 if (posLess != std::string::npos) {
3040 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());
3042 if (normalizedName.length()) {
3052 auto ci =
gInterpreter->ClassInfo_Factory(normalizedName.c_str());
3054 auto method =
gInterpreter->MethodInfo_Factory(funcDecl);
3055 typedef void (*tcling_callfunc_Wrapper_t)(
void *, int,
void **,
void *);
3056 auto funcPtr = (tcling_callfunc_Wrapper_t)
gInterpreter->MethodInfo_InterfaceMethod(method);
3060 funcPtr(0, 0,
nullptr, &res);
3072 std::string alternative;
3073 gInterpreter->GetInterpreterTypeName(normalizedName.c_str(), alternative,
kTRUE);
3074 const char *altname = alternative.c_str();
3075 if (strncmp(altname,
"std::", 5) == 0) {
3080 if (altname != normalizedName && strcmp(altname, name) != 0) {
3107 if (!
gROOT->GetListOfClasses())
3115 if (cl && cl->
IsLoaded())
return cl;
3122 cl =
GetIdMap()->Find(typeinfo.name());
3141 if (!load)
return 0;
3151 TIter next(
gROOT->GetListOfClassGenerators());
3163 if (!autoload_old) {
3195 if (!
gROOT->GetListOfClasses())
return 0;
3209 if (cl->IsLoaded())
return cl;
3216 if (!load)
return 0;
3219 if (cl) loadedcl =
gROOT->LoadClass(cl->GetName(),silent);
3220 else loadedcl =
gROOT->LoadClass(
name,silent);
3222 if (loadedcl)
return loadedcl;
3247 if (!
gROOT->GetListOfClasses())
return 0;
3251 DeclIdMap_t::equal_range iter = map->Find(
id);
3252 if (iter.first == iter.second)
return false;
3253 std::vector<TClass*>::iterator vectIt = classes.begin();
3254 for (DeclIdMap_t::const_iterator it = iter.first; it != iter.second; ++it)
3255 vectIt = classes.insert(vectIt, it->second);
3283 || datamember == 0)
return 0;
3286 const char *start_name = datamember;
3287 while (*start_name ==
'*') ++start_name;
3292 if (
const char *
s = strchr(start_name,
'[')){
3294 TString
name(start_name,len);
3312 if (strchr(name,
'[')==0) {
3354 std::string givenName(name);
3357 std::string::size_type firstBracket = givenName.find_first_of(
"[");
3358 if (firstBracket != std::string::npos) {
3360 std::string nameNoDim(givenName.substr(0, firstBracket));
3363 TObject* obj = lnk->GetObject();
3364 std::string objName(obj->
GetName());
3365 std::string::size_type pos = objName.find_first_of(
"[");
3367 if (pos != std::string::npos) {
3369 if (objName == nameNoDim) {
3378 std::ostringstream ptrname;
3379 ptrname <<
"*" << givenName;
3386 std::string::size_type firstDot = givenName.find_first_of(
".");
3387 if (firstDot == std::string::npos) {
3398 std::string::size_type lastDot = givenName.find_last_of(
".");
3399 std::ostringstream starname;
3400 starname << givenName.substr(0, lastDot) <<
".*" << givenName.substr(lastDot + 1);
3408 std::string firstDotName(givenName.substr(firstDot + 1));
3422 std::string::size_type firstDotBracket = firstDotName.find_first_of(
"[");
3423 if (firstDotBracket != std::string::npos) {
3425 std::string nameNoDim(firstDotName.substr(0, firstDotBracket));
3428 TObject* obj = lnk->GetObject();
3429 std::string objName(obj->
GetName());
3430 std::string::size_type pos = objName.find_first_of(
"[");
3432 if (pos != std::string::npos) {
3434 if (objName == nameNoDim) {
3447 ptrname <<
"*" << firstDotName;
3463 std::string::size_type bracket = starname.str().find_first_of(
"[");
3464 if (bracket == std::string::npos) {
3509 if (!
fBase.load()) {
3534 Fatal(
"GetListOfBases",
"gInterpreter not initialized");
3537 if (!
fBase.load()) {
3563 auto temp =
fEnums.load();
3565 if (requestListLoading) {
3580 if (!requestListLoading) {
3587 static bool fromRootCling = dlsym(RTLD_DEFAULT,
"usedToIdentifyRootClingByDlSym");
3672 if (
gDebug>0)
Info(
"GetListOfMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3705 if (
gDebug>0)
Info(
"GetListOfAllPublicMethods",
"Header Parsing - Asking for all the methods of class %s: this can involve parsing.",
GetName());
3735 while ((baseClass = (
TBaseClass *) nextBase())) {
3743 while ((method = (
TMethod*)next())) {
3802 TIter nextMemb(ldm);
3833 for (
int i = 0; i < 2; i++) {
3849 if (
this == sCIString)
return;
3852 if (strncmp(
fName,
"pair<", 5) == 0) {
3860 if (uniquePtrCl && !uniquePtrCl->HasDictionary()) {
3909 if (
this == sCIString)
return;
3913 if (strncmp(
fName,
"pair<", 5) == 0) {
3968 while ((acl = (
TClass*)nextClass())) {
3969 if (acl == newcl)
continue;
3971 TIter nextInfo(acl->GetStreamerInfos());
3974 info->
Update(
this, newcl);
3977 if (acl->GetCollectionProxy()) {
3978 acl->GetCollectionProxy()->UpdateValueClass(
this, newcl);
3983 TIter delIter( &tobedeleted );
3984 while ((acl = (
TClass*)delIter())) {
3997 Warning(
"ResetClassInfo(Long_t tagnum)",
"Call to deprecated interface (does nothing)");
4048 (*fMethod).Unload();
4082 if (options==0 || options[0]==0)
return;
4084 if (strstr(options,
"streamerinfo")!=0) {
4088 std::map<std::string, TObjArray*>::iterator it;
4089 std::map<std::string, TObjArray*>::iterator end = (*fConversionStreamerInfo).end();
4090 for( it = (*fConversionStreamerInfo).begin(); it != end; ++it ) {
4091 it->second->ls(options);
4118 TIter next(methodList);
4120 while ((method = (
TMethod*) next())) {
4122 if (classPtr != method->
GetClass()) {
4130 TIter nextarg(margsList);
4131 while ((methodArg = (
TMethodArg*)nextarg())) {
4134 if (sig.Length()!=0) sig.Remove(0,1);
4181 if(
fMethod.compare_exchange_strong(expected, temp.get()) ) {
4239 Fatal(
"GetMethod",
"gInterpreter not initialized");
4245 if (!decl)
return 0;
4252 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4253 method,params,objectIsConst ?
"const " :
"",
GetName());
4263 return static_cast<TMethod *
>(method);
4266 if (
auto base = static_cast<TBaseClass *>(item)->GetClassPointer())
4267 if (
TFunction* method = base->FindClassOrBaseMethodWithId(declId))
4268 return static_cast<TMethod *>(method);
4285 Fatal(
"GetMethodWithPrototype",
"gInterpreter not initialized");
4289 objectIsConst, mode);
4291 if (!decl)
return 0;
4294 Error(
"GetMethodWithPrototype",
4295 "\nDid not find matching TMethod <%s> with \"%s\" %sfor %s",
4296 method,proto,objectIsConst ?
"const " :
"",
GetName());
4310 while ((m = (
TMethod *) next())) {
4330 Fatal(
"GetClassMethod",
"gInterpreter not initialized");
4336 if (!decl)
return 0;
4356 Fatal(
"GetClassMethodWithPrototype",
"gInterpreter not initialized");
4363 if (!decl)
return 0;
4455 Error(
"GetStreamerInfo",
"class: %s, attempting to access a wrong version: %d",
GetName(), version);
4474 TMmallocDescTemp setreset;
4528 newname +=
"@@emulated";
4553 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4566 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4591 newname +=
"@@emulated";
4606 if (!sinfo && (checksum !=
fCheckSum)) {
4616 for (
Int_t i = -1; sinfo == 0 && i < ninfos; ++i)
4629 Error(
"GetStreamerInfoAbstractEmulated",
"could not create TVirtualStreamerInfo");
4676 Error(
"IgnoreTObjectStreamer",
"Must be called before the creation of StreamerInfo");
4702 if (cl ==
this)
return kTRUE;
4711 TClass *clbase = element->GetClassPointer();
4712 if (!clbase)
return kFALSE;
4719 if (((
TClass *)
this)->GetBaseClass(cl))
return kTRUE;
4731 if (cl ==
this)
return obj;
4738 return (
void*)((
Long_t)obj+off);
4740 return (
void*)((
Long_t)obj-off);
4806 Error(
"New",
"cannot create object of class %s",
GetName());
4822 Error(
"New",
"cannot create object of class %s",
GetName());
4833 Error(
"New",
"cannot create object of class %s",
GetName());
4854 if (!sinfo && !quiet) {
4873 Error(
"New",
"Failed to construct class '%s' using streamer info",
GetName());
4876 Fatal(
"New",
"This cannot happen!");
4900 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4915 Error(
"New with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
4943 Error(
"New with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
4948 p = sinfo->
New(arena);
4962 Error(
"New with placement",
"This cannot happen!");
5049 Error(
"NewArray",
"This cannot happen!");
5073 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5088 Error(
"NewArray with placement",
"cannot create object of class %s version %d at address %p",
GetName(),
fClassVersion, arena);
5116 Error(
"NewArray with placement",
"Cannot construct class '%s' version %d at address %p, no streamer info available!",
GetName(),
fClassVersion, arena);
5121 p = sinfo->
NewArray(nElements, arena);
5140 Error(
"NewArray with placement",
"This cannot happen!");
5152 if (obj == 0)
return;
5159 }
else if ((!dtorOnly) &&
fDelete) {
5191 std::multiset<Version_t> knownVersions;
5204 knownVersions.insert(ver);
5212 if (!inRepo || verFound) {
5219 Error(
"Destructor",
"No streamer info available for class '%s' version %d at address %p, cannot destruct emulated object!",
GetName(),
fClassVersion, p);
5225 Error(
"Destructor",
"Doing Dump() ...");
5240 Error(
"Destructor2",
"No streamer info available for class '%s' version %d, cannot destruct object at addr: %p",
GetName(), objVer, p);
5247 Error(
"Destructor2",
"Doing Dump() ...");
5255 if (inRepo && verFound && p) {
5259 Error(
"Destructor",
"This cannot happen! (class %s)",
GetName());
5269 if (ary == 0)
return;
5276 Error(
"DeleteArray",
"Destructor only is not supported!");
5305 std::multiset<Version_t> knownVersions;
5316 knownVersions.insert(ver);
5324 if (!inRepo || verFound) {
5331 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(),
fClassVersion, ary);
5337 Error(
"DeleteArray",
"Doing Dump() ...");
5346 Error(
"DeleteArray",
"Loaded class version %d is not registered for addr %p",
fClassVersion, p);
5355 Error(
"DeleteArray",
"No streamer info available for class '%s' version %d at address %p, cannot destruct object!",
GetName(), objVer, ary);
5362 Error(
"DeleteArray",
"Doing Dump() ...");
5373 if (inRepo && verFound && p) {
5377 Error(
"DeleteArray",
"This cannot happen! (class '%s')",
GetName());
5448 char *
s =
new char[maxsize];
5453 while (strlen(s) == (maxsize - 1)) {
5456 maxsize = 2*maxsize;
5458 s =
new char[maxsize];
5464 ::Error(
"TClass::Load",
"dictionary of class %s not found", s);
5488 if (result)
return result;
5536 TIter next(
gROOT->GetListOfClassGenerators());
5563 bool autoParse = !
gInterpreter->IsAutoParsingSuspended();
5569 gInterpreter->SetClassInfo(const_cast<TClass *>(
this));
5577 ::Error(
"TClass::LoadClassInfo",
"no interpreter information for class %s is available" 5578 " even though it has a TClass initialization routine.",
5601 const char *dfil,
const char *ifil,
5606 TMmallocDescTemp setreset;
5607 return new TClass(cname,
id, info, isa, dfil, ifil, dl, il);
5615 const char *dfil,
const char *ifil,
5620 TMmallocDescTemp setreset;
5621 return new TClass(cname,
id, dfil, ifil, dl, il);
5725 The class %s transitioned from not having a specified class version\n\ 5726 to having a specified class version (the current class version is %d).\n\ 5727 However too many different non-versioned layouts of the class have\n\ 5728 already been loaded so far. To work around this problem you can\n\ 5729 load fewer 'old' file in the same ROOT session or load the C++ library\n\ 5730 describing the class %s before opening the files or increase the version\n\ 5731 number of the class for example ClassDef(%s,%d).\n\ 5732 Do not try to write objects with the current class definition,\n\ 5733 the files might not be readable.\n",
5737 The StreamerInfo version %d for the class %s which was read\n\ 5738 from a file previously opened has the same version as the active class\n\ 5739 but a different checksum. You should update the version to ClassDef(%s,%d).\n\ 5740 Do not try to write objects with the current class definition,\n\ 5741 the files will not be readable.\n" 5786 TMmallocDescTemp setreset;
6001 Fatal(
"SetUnloaded",
"The TClass for %s is being unloaded when in state %d\n",
6026 (*fMethod).Unload();
6035 if (fState <= kForwardDeclared && fStreamerInfo->GetEntries() != 0) {
6128 //info is empty. Let's build the default Streamer descriptor
6130 char *temp = new char[10000];
6134 //add list of base classes
6135 TIter nextb(GetListOfBases());
6137 while ((base = (TBaseClass*) nextb())) {
6138 snprintf(local,100,"%s;",base->GetName());
6139 strlcat(temp,local,10000);
6142 //add list of data members and types
6143 TIter nextd(GetListOfDataMembers());
6144 while ((dm = (TDataMember *) nextd())) {
6145 if (dm->IsEnum()) continue;
6146 if (!dm->IsPersistent()) continue;
6147 Long_t property = dm->Property();
6148 if (property & kIsStatic) continue;
6149 TClass *acl = TClass::GetClass(dm->GetTypeName(),update);
6152 if (acl->GetClassVersion() == 0) continue;
6155 // dm->GetArrayIndex() returns an empty string if it does not
6157 const char * index = dm->GetArrayIndex();
6158 if (strlen(index)==0)
6159 snprintf(local,100,"%s %s;",dm->GetFullTypeName(),dm->GetName());
6161 snprintf(local,100,"%s %s[%s];",dm->GetFullTypeName(),dm->GetName(),index);
6162 strlcat(temp,local,10000);
6164 //fStreamerInfo = temp;
6253 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6258 TIter nextBase(tlb);
6267 for (
int i=0; i<il; i++)
id =
id*3+name[i];
6270 Error(
"GetCheckSum",
"Calculating the checksum for (%s) requires the base class (%s) meta information to be available!",
6279 TList *tlm = ((
TClass*)
this)->GetListOfDataMembers();
6281 TIter nextMemb(tlm);
6292 name = tdm->
GetName(); il = name.Length();
6297 for (i=0; i<il; i++)
id =
id*3+name[i];
6309 type.ReplaceAll(
"ULong64_t",
"unsigned long long");
6310 type.ReplaceAll(
"Long64_t",
"long long");
6311 type.ReplaceAll(
"<signed char",
"<char");
6312 type.ReplaceAll(
",signed char",
",char");
6313 if (type==
"signed char") type =
"char";
6325 for (i=0; i<il; i++)
id =
id*3+type[i];
6329 for (
int ii=0;ii<dim;ii++)
id =
id*3+tdm->
GetMaxIndex(ii);
6336 left = strstr(tdm->
GetTitle(),
"[");
6338 const char *right = strstr(left,
"]");
6341 while (left != right) {
6467 streamer->
Stream(b,
object,onfile_class);
6557 pThis->
Fatal(
"StreamerDefault",
"fStreamerImpl not properly initialized (%d)", pThis->
fStreamerType);
6719 for (
Int_t i=-1;i<ninfos;++i) {
6741 for (
Int_t i=-1;i<ninfos;i++) {
6745 if (!info)
continue;
6786 std::map<std::string, TObjArray*>::iterator it;
6789 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6791 if( it != (*fConversionStreamerInfo).end() ) {
6795 if( arr && version > -1 && version < arr->GetSize() && arr->
At( version ) )
6807 if( version >= -1 && version < clSI->GetSize() )
6845 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6884 std::map<std::string, TObjArray*>::iterator it;
6888 it = (*fConversionStreamerInfo).find( cl->
GetName() );
6890 if( it != (*fConversionStreamerInfo).end() ) {
6939 (*fConversionStreamerInfo)[cl->
GetName()] = arr;
6958 Error(
"RegisterStreamerInfo",
6959 "Register StreamerInfo for %s on non-empty slot (%d).",
6999 static const char *handVerified[] = {
7000 "TEnvRec",
"TDataType",
"TObjArray",
"TList",
"THashList",
7001 "TClass",
"TCling",
"TInterpreter",
"TMethod",
"ROOT::Internal::TCheckHashRecursiveRemoveConsistency",
7002 "TCheckHashRecursiveRemoveConsistency",
"TGWindow",
7003 "TDirectory",
"TDirectoryFile",
"TObject",
"TH1",
7006 if (cname && cname[0]) {
7007 for (
auto cursor : handVerified) {
7008 if (strcmp(cname, cursor) == 0)
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
void AddQualifiedName(const char *name)
Extract this part of the name.
Short_t GetImplFileLine() const
void ResetCaches()
To clean out all caches.
virtual Bool_t ClassInfo_HasDefaultConstructor(ClassInfo_t *) const
virtual int DataMemberInfo_Next(DataMemberInfo_t *) const
virtual void SetClass(TClass *cl)=0
virtual const char * GetName() const
Returns name of object.
Long_t ClassProperty() const
Return the C++ property of this class, eg.
virtual void * New(void *obj=0)=0
Int_t GetNdata()
Return the number of data members of this class Note that in case the list of data members is not yet...
void SetBufferOffset(Int_t offset=0)
Bool_t AddRule(TSchemaRule *rule, EConsistencyCheck checkConsistency=kCheckAll, TString *errmsg=0)
The consistency check always fails if the TClass object was not set! if checkConsistency is: kNoCheck...
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
ShowMembersFunc_t fShowMembers
Bool_t HasInterpreterInfoInMemory() const
virtual TClassStreamer * GenEmulatedClassStreamer(const char *class_name, Bool_t silent)=0
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method). ...
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
virtual void SetClass(TClass *cl)=0
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
void SetIsObject(Bool_t isObject)
static TDataType * GetDataType(EDataType type)
Given a EDataType type, get the TDataType* that represents it.
virtual void * NewArray(Int_t nElements) const
ROOT::NewArrFunc_t fNewArray
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
void(* ClassStreamerFunc_t)(TBuffer &, void *)
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
std::atomic< TMethodCall * > fIsAMethod
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
TString GetTypeName()
Get basic type of typedef, e,g.
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
virtual Int_t GetProperties() const
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
const char * GetDeclFileName() const
void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse)
Verify the base classes always.
Namespace for new ROOT classes and functions.
virtual Bool_t CompareContent(TClass *cl, TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete, TFile *file)=0
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
Int_t GetNmethods()
Return the number of methods of this class Note that in case the list of methods is not yet created...
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
void(* DelArrFunc_t)(void *)
const char * GetImplFileName() const
virtual TClass * GetClass() const =0
Collectable string class.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
static void AddClassToDeclIdMap(TDictionary::DeclId_t id, TClass *cl)
static: Add a TClass* to the map of classes.
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
virtual TVirtualCollectionProxy * GenExplicitProxy(const ::ROOT::Detail::TCollectionProxyInfo &info, TClass *cl)=0
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...
R__EXTERN TClassTable * gClassTable
ConvSIMap_t fConversionStreamerInfo
TDictionary::DeclId_t DeclId_t
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
Dictionary for function template This class describes one single function template.
virtual TClass * GetValueClass() const =0
virtual Bool_t ClassInfo_IsValid(ClassInfo_t *) const
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
All ROOT classes may have RTTI (run time type identification) support added.
static TProtoClass * GetProtoNorm(const char *cname)
Given the class normalized name returns the TClassProto object for the class.
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
Short_t GetDeclFileLine() const
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
TList * GetMenuList() const
Return the list of menu items associated with the class.
std::atomic< TListOfEnums * > fEnums
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
void BuildEmulatedRealData(const char *name, Long_t offset, TClass *cl)
Build the list of real data for an emulated class.
TObject * Clone(const char *newname="") const
Create a Clone of this TClass object using a different name but using the same 'dictionary'.
void SetClassVersion(Version_t version)
Private function.
TViewPubFunctions * fAllPubMethod
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
Persistent version of a TClass.
void ResetMenuList()
Resets the menu list to it's standard value.
std::atomic< Bool_t > fHasRootPcmInfo
C++ Property of the class (is abstract, has virtual table, etc.)
static THashTable * fgClassTypedefHash
const std::type_info * GetTypeInfo() const
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
TMethod * GetClassMethodWithPrototype(const char *name, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
virtual void AddFirst(TObject *obj)
Add object at the beginning of the list.
ROOT::NewArrFunc_t GetNewArray() const
ROOT::DirAutoAdd_t fDirAutoAdd
static void RemoveClassDeclId(TDictionary::DeclId_t id)
Buffer base class used for serializing objects.
static void SetObjectStat(Bool_t stat)
Turn on/off tracking of objects in the TObjectTable.
Bool_t HasInterpreterInfo() const
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
This class implements a mutex interface.
ROOT::DelArrFunc_t GetDeleteArray() const
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
virtual TVirtualStreamerInfo * NewInfo(TClass *cl)=0
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
const TList * GetListForObject(const char *name) const
Return the TList corresponding to object's name based hash value.
ROOT::DelFunc_t GetDelete() const
virtual void Browse(TBrowser *b)
Browse object. May be overridden for another default action.
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
TString fContextMenuTitle
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Short_t Min(Short_t a, Short_t b)
R__EXTERN TVirtualMutex * gROOTMutex
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
virtual void * New() const
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
Each ROOT method (see TMethod) has a linked list of its arguments.
virtual Int_t GetSize() const =0
static void StreamerTObjectInitialized(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when fIsOffsetStreamerSet is known to have been set.
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' into this collection...
static const char * GetElementCounterStart(const char *dmTitle)
Given a comment/title declaring an array counter, for example: //[fArraySize] array of size fArraySiz...
Int_t fStreamerType
saved info to call Streamer
bool IsSTLBitset(const char *type)
Return true is the name is std::bitset<number> or bitset<number>
TFunction * Get(DeclId_t id)
Return (after creating it if necessary) the TMethod or TFunction describing the function correspondin...
ROOT::NewFunc_t GetNew() const
virtual void Stream(TBuffer &b, void *objp, const TClass *onfileClass)
Abstract base class for accessing the data-members of a class.
TObject * At(Int_t idx) const
static void MoveAddressInRepository(const char *, void *oldadd, void *newadd, const TClass *what)
void ReplaceWith(TClass *newcl) const
static void StreamerStreamerInfo(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of where we should directly use the StreamerInfo.
const char * GetFullTypeName() const
Get full type description of method argument, e.g.: "class TDirectory*".
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
virtual void Clear(Option_t *)=0
Set name and title to empty strings ("").
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
void SetClassSize(Int_t sizof)
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
virtual void AddLast(TObject *obj)
Add object at the end of the list.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
virtual TObject * FindObject(const char *name) const
Delete a TObjLink object.
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
void ResetInstanceCount()
virtual void ClassInfo_Destruct(ClassInfo_t *, void *) const
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 Move(void *arenaFrom, void *arenaTo) const
Register the fact that an object was moved from the memory location 'arenaFrom' to the memory locatio...
static IdMap_t * GetIdMap()
static void StreamerTObjectEmulated(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when we do not have the library defining the class.
Int_t GetBaseClassOffset(const TClass *toBase, void *address=0, bool isDerivedObject=true)
TDeclNameRegistry & fNoInfoOrEmuOrFwdDeclNameRegistry
virtual int ClassInfo_Size(ClassInfo_t *) const
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
TIsAProxy implementation class.
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
virtual Int_t GetClassVersion() const =0
THashTable implements a hash table to store TObject's.
virtual const char * ClassInfo_Title(ClassInfo_t *) const
TMethod * FindClassOrBaseMethodWithId(DeclId_t faddr)
Find a method with decl id in this class or its bases.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
void Dump() const
Dump contents of object on stdout.
Bool_t FillTClass(TClass *pcl)
Move data from this TProtoClass into cl.
std::atomic< TList * > fBase
static Int_t ReadRules()
Read the class.rules files from the default location:.
void * InterfaceMethod() const
Return pointer to the interface method.
ClassStreamerFunc_t fStreamerFunc
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
void Init(const char *name, Version_t cversion, const std::type_info *info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il, ClassInfo_t *classInfo, Bool_t silent)
Initialize a TClass object.
static DeclIdMap_t * GetDeclIdMap()
R__EXTERN void * gMmallocDesc
virtual Long_t ClassInfo_Property(ClassInfo_t *) const
virtual Int_t GetOffset(const char *) const =0
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...
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
virtual TVirtualCollectionProxy * GenEmulatedProxy(const char *class_name, Bool_t silent)=0
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Int_t GetDelta()
Get offset from "this" to part of base class.
virtual void BuildOld()=0
virtual void * ClassInfo_New(ClassInfo_t *) const
void InterpretedShowMembers(void *obj, TMemberInspector &insp, Bool_t isTransient)
Do a ShowMembers() traversal of all members and base classes' members using the reflection informatio...
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time.
#define R__WRITE_LOCKGUARD(mutex)
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
void AdoptStreamer(TMemberStreamer *p)
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) const
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function)...
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
Long_t GetThisOffset() const
ClassInfo_t * GetClassInfo() const
void *(* NewFunc_t)(void *)
R__EXTERN TVirtualRWMutex * gCoreMutex
TDataType * GetDataType() const
virtual TClass * GetActualClass(const void *obj) const =0
virtual void * NewArray(Long_t nElements, void *ary=0)=0
bool IsStdArray(std::string_view name)
virtual Long_t DataMemberInfo_Property(DataMemberInfo_t *) const
void RegisterStreamerInfo(TVirtualStreamerInfo *info)
Register the StreamerInfo in the given slot, change the State of the TClass as appropriate.
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
TListOfFunctionTemplates * fFuncTemplate
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
TClass *(* DictFuncPtr_t)()
Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="")
Function called by the Streamer functions to serialize object at p to buffer b.
const char * GetVersion() const
Get the version string.
bool IsInterpreterDetail(const char *type)
Return true if the type is one the interpreter details which are only forward declared (ClassInfo_t e...
TVirtualPad is an abstract base class for the Pad and Canvas classes.
ROOT::MergeFunc_t GetMerge() const
const TObjArray * GetStreamerInfos() const
TViewPubDataMembers * fAllPubData
TVirtualStreamerInfo * SetStreamerInfo(Int_t version, const char *info="")
Info is a string describing the names and types of attributes written by the class Streamer function...
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
std::atomic< StreamerImpl_t > fStreamerImpl
R__ALWAYS_INLINE Bool_t IsZombie() const
ROOT::DesFunc_t GetDestructor() const
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...
~InsertTClassInRegistryRAII()
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
Int_t GetMaxIndex(Int_t dim) const
Return maximum index for array dimension "dim".
View implementing the TList interface and giving access all the TDictionary describing public data me...
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
const char * fImplFileName
virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t *, Int_t) const
virtual void BuildCheck(TFile *file=0)=0
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
void ls(Option_t *opt="") const
The ls function lists the contents of a class on stdout.
virtual void Delete(Option_t *option="")
Delete all TFunction object files.
#define R__READ_LOCKGUARD(mutex)
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
virtual const char * DataMemberInfo_TypeName(DataMemberInfo_t *) const
virtual TObject * FindObject(const TObject *obj) const
Find object using its hash value (returned by its Hash() member).
Using a TBrowser one can browse all ROOT objects.
Bool_t IsCompiled() const
virtual DataMemberInfo_t * DataMemberInfo_Factory(ClassInfo_t *=0) const
static void RegisterAddressInRepository(const char *, void *location, const TClass *what)
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
Int_t GetLast() const
Return index of last object in array.
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
virtual void ls(Option_t *option="") const
List TNamed name and title.
virtual TList * GetListOfMethodArgs()
Returns methodarg list and additionally updates fDataMember in TMethod by calling FindDataMember();...
virtual void DataMemberInfo_Delete(DataMemberInfo_t *) const
Int_t GetNargs() const
Number of function arguments.
virtual char * ReadString(char *s, Int_t max)=0
void *(* NewArrFunc_t)(Long_t size, void *arena)
virtual Bool_t BuildFor(const TClass *cl)=0
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
Bool_t HasLocalHashMember() const
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
R__EXTERN TSystem * gSystem
const char * GetTargetClass() const
Get the targte class of this rule (i.e. the in memory class).
void AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
Adopt the TMemberStreamer pointer to by p and use it to Stream non basic member name.
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.
Basic data type descriptor (datatype information is obtained from CINT).
TObject * Remove(TObject *key)
Remove the (key,value) pair with key from the map.
This class defines an abstract interface that must be implemented by all classes that contain diction...
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
void SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t *) const
Bool_t HasDefaultConstructor() const
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
void Delete(Option_t *option="")
Delete is not allowed in this class.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
virtual Bool_t HasPointers() const =0
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
void Store(TBuffer &b) const
Store class description on I/O buffer.
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
virtual void Inspect() const
Dump contents of this object in a graphics canvas.
Collection abstract base class.
virtual Int_t AutoParse(const char *cls)=0
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
void SetClass(TClass *cls)
Set the TClass associated with this rule set.
static void StreamerTObject(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects.
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
Int_t GetEntriesFast() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
void Draw(Option_t *option="")
Draw detailed class inheritance structure.
Int_t Size() const
Return size of object of this class.
TClass * CreateClass(const char *cname, Version_t id, const std::type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il)
Global function called by a class' static Dictionary() method (see the ClassDef macro).
static void UnregisterAddressInRepository(const char *, void *location, const TClass *what)
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
The TRealData class manages the effective list of all data members for a given class.
virtual void Browse(TBrowser *b)
This method is called by a browser to get the class information.
Bool_t CanIgnoreTObjectStreamer()
InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry)
Objects following this interface can be passed onto the TROOT object to implement a user customized w...
Int_t GetArrayDim() const
Return number of array dimensions.
The ROOT global object gROOT contains a list of all defined classes.
TVirtualCollectionProxy * fCollectionProxy
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
ROOT::TMapTypeToTClass IdMap_t
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
std::atomic< UChar_t > fRuntimeProperties
static Bool_t GetObjectStat()
Get status of object stat flag.
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
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...
static TVirtualMutex * gOVRMutex
Each class (see TClass) has a linked list of its base class(es).
virtual TObjLink * FirstLink() const
void SetCollectionProxy(const ROOT::Detail::TCollectionProxyInfo &)
Create the collection proxy object (and the streamer object) from using the information in the TColle...
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
Bool_t HasConsistentHashMember()
Return 'true' if we can guarantee that if this class (or any class in this class inheritance hierarch...
View implementing the TList interface and giving access all the TFunction describing public methods i...
#define R__LOCKGUARD2(mutex)
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...
static void RemoveClass(TClass *cl)
static: Remove a class from the list and map of classes
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
virtual void SetClass(TClass *classptr)=0
void Load()
Load all the functions known to the interpreter for the scope 'fClass' and all its bases classes...
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE)=0
const char * GetTargetString() const
Get the target data members of this rule as a simple string (i.e. the in memory data member)...
TMethod * GetClassMethod(Long_t faddr)
Look for a method in this class that has the interface function address faddr.
ROOT::DesFunc_t fDestructor
void SetRuntimeProperties()
Internal routine to set calculate the class properties that can only be known at run-time, for example whether the Hash member function and the destructor are consistent.
const char * GetTrueTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
std::atomic_flag fSpinLock
virtual void ClassInfo_DeleteArray(ClassInfo_t *, void *, bool) const
std::unordered_set< std::string > fClassNamesSet
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
void ForceReload(TClass *oldcl)
we found at least one equivalent.
void SetCanSplit(Int_t splitmode)
Set the splitability of this class:
std::atomic< TListOfFunctions * > fMethod
Bool_t CanSplitBaseAllow()
Pointer to the function implementing streaming for this class.
ROOT::DelArrFunc_t fDeleteArray
Class used by TMap to store (key,value) pairs.
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
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.
Version_t GetClassVersion() const
void Add(THist< DIMENSIONS, PRECISION_TO, STAT_TO... > &to, const THist< DIMENSIONS, PRECISION_FROM, STAT_FROM... > &from)
Add two histograms.
TObject * FindObject(const char *name) const
Find object using its name.
TObject * UncheckedAt(Int_t i) const
static const double x1[5]
TObjArray * fStreamerInfo
std::atomic< TClass ** > fPersistentRef
virtual UInt_t Sizeof() const =0
Long_t fOffsetStreamer
Properties that can only be evaluated at run-time.
EState fState
cached of the streaming method to use
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
virtual TObjArray * GetElements() const =0
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name).
virtual Bool_t IsaPointer() const
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
Long_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Wrapper around a TObject so it can be stored in a TList.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
TClass::ENewType & TClass__GetCallingNew()
static void AddClass(TClass *cl)
static: Add a class to the list and map of classes.
TList * GetListOfRealData() const
Bool_t HasDataMemberInfo() const
virtual int DataMemberInfo_TypeSize(DataMemberInfo_t *) const
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
const std::type_info * fTypeInfo
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual ~TClass()
TClass dtor. Deletes all list that might have been created.
virtual Long_t ClassInfo_GetBaseOffset(ClassInfo_t *, ClassInfo_t *, void *=0, bool=true) const
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
static bool Check(TClass &classRef)
void Add(TObject *obj)
Add object to the hash table.
virtual void * At(UInt_t idx)=0
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
static constexpr double s
#define R__LOCKGUARD(mutex)
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
EMenuItemKind IsMenuItem() const
virtual void Add(TObject *obj)=0
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
virtual Version_t GetOldVersion() const =0
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
std::atomic< Long_t > fProperty
Indicates whether this class can be split or not.
virtual TClassStreamer * Generate() const
UInt_t Find(std::list< std::pair< const Node< T > *, Float_t > > &nlist, const Node< T > *node, const T &event, UInt_t nfind)
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Bool_t IsPersistent() const
virtual void Update(const TClass *oldClass, TClass *newClass)=0
virtual void Delete(Option_t *option="")
Delete all TDataMember object files.
IsAGlobalFunc_t fGlobalIsA
pointer to the class's IsA proxy.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
ROOT::TMapDeclIdToTClass DeclIdMap_t
virtual const char * DataMemberInfo_Name(DataMemberInfo_t *) const
Long_t fClassProperty
Property.
TDeclNameRegistry(Int_t verbLevel=0)
TDeclNameRegistry class constructor.
Mother of all ROOT objects.
const char * AsString(void *buf) const
Return string containing value in buffer formatted according to the basic data type.
Global functions class (global functions are obtained from CINT).
virtual void Inspect(TClass *cl, const char *parent, const char *name, const void *addr)
TFunctionTemplate * GetFunctionTemplate(const char *name)
static TVirtualStreamerInfo * Factory()
Static function returning a pointer to a new TVirtualStreamerInfo object.
void Load()
Load all the functions known to the interpreter for the scope 'fClass' into this collection.
void(* DelFunc_t)(void *)
Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
TObject * GetObject() const
virtual UInt_t Size() const =0
TClassRef is used to implement a permanent reference to a TClass object.
static std::atomic< Int_t > fgClassCount
typedef void((*Func_t)())
virtual void ClassInfo_Delete(ClassInfo_t *) const
TNameMapNode(const char *typedf, const char *orig)
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
void Unload()
Mark 'all func' as being unloaded.
virtual const char * ClassInfo_FullName(ClassInfo_t *) const
void AddImplFile(const char *filename, int line)
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
TVirtualMutex * gInterpreterMutex
Bool_t HasDeclName(const char *name) const
std::atomic< UInt_t > fCheckSum
TListOfDataMembers * fData
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
const char * GetTypeName() const
virtual Int_t GetOnFileClassVersion() const =0
virtual void Add(TObject *obj)
void(* DirAutoAdd_t)(void *, TDirectory *)
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE)=0
virtual Long_t ClassInfo_ClassProperty(ClassInfo_t *) const
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Each ROOT class (see TClass) has a linked list of methods.
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
ClassConvStreamerFunc_t fConvStreamerFunc
TClass * GetClass() const
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
bool IsUniquePtr(std::string_view name)
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' and all its bases classes...
const char * fDeclFileName
virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t *) const
TClassStreamer * fStreamer
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
void LoadClassInfo() const
Try to load the ClassInfo if available.
virtual Int_t ReadClassEmulated(const TClass *cl, void *object, const TClass *onfile_class=0)=0
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
void * DynamicCast(const TClass *base, void *obj, Bool_t up=kTRUE)
Cast obj of this class type up to baseclass cl if up is true.
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
Bool_t HasConsistentHashMember(TClass &clRef)
Return true is the Hash/RecursiveRemove setup is consistent, i.e.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
const Bool_t kIterBackward
std::string GetUniquePtrType(std::string_view name)
virtual TList * GetListForObject(const char *name) const
Return the set of overloads for this name, collecting all available ones.
R__EXTERN TInterpreter * gCling
virtual const char * GetName() const
Returns name of object.
virtual Int_t GetSize() const
Abstract Interface class describing Streamer information for one class.
virtual const char * GetName() const
Returns name of object.
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...
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Bool_t IsaPointer() const
Return true if data member is a pointer.
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
virtual TVirtualRefProxy * Clone() const =0
virtual void DeleteArray(void *p, Bool_t dtorOnly=kFALSE) const
static DictFuncPtr_t GetDictNorm(const char *cname)
Given the normalized class name returns the Dictionary() function of a class (uses hash of name)...
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
std::multimap< void *, ObjRepoValue > RepoCont_t
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
virtual Bool_t ClassInfo_HasMethod(ClassInfo_t *, const char *) const
This class stores a (key,value) pair using an external hash.
ROOT::MergeFunc_t fMerge
saved info to call a IsA member function
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void AddAt(UInt_t slot, ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table.
void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector &)
Indirect call to the implementation of ShowMember allowing [forward] declaration with out a full defi...
A spin mutex-as-code-guard class.
virtual const char * GetTitle() const
Returns title of object.
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
Bool_t SetFromRule(const char *rule)
Set the content fot this object from the rule See TClass::AddRule for details on the syntax...
TObject * Remove(TObject *obj)
Remove object from the hashtable.
virtual TVirtualCollectionProxy * Generate() const =0
static RepoCont_t gObjectVersionRepository
virtual void WriteString(const char *s)=0
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual int SetClassAutoloading(int) const
virtual UInt_t GetCheckSum() const =0
void(* DesFunc_t)(void *)
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return list containing the TEnums of a class.