59 static std::mutex sMutex;
135#define R__USE_STD_MAP
137#if defined R__USE_STD_MAP
141 typedef std::map<std::string, TClassRec*>
IdMap_t;
164 if (iter !=
fMap.end()) cl = iter->second;
171 Info(
"TMapTypeToClassRec::Print",
"printing the typeinfo map in TClassTable");
173 printf(
"Key: %40s 0x%zx\n", iter->first.c_str(), (
size_t)iter->second);
180#ifdef R__COMPLETE_MEM_TERMINATION
205 void Remove(
const char *key) {
214 Info(
"TMapTypeToClassRec::Print",
"printing the typeinfo map in TClassTable");
221 printf(
" class: %s %d\n",data->
fName,data->
fId);
223 printf(
" no class: \n");
232 auto p =
reinterpret_cast<const unsigned char*
>(
name );
235 while (*p) slot = slot<<1 ^ *p++;
243 static std::vector<std::unique_ptr<TClassRec>> delayedAddClass;
244 return delayedAddClass;
249 static std::vector<std::pair<const char *, const char *>> delayedAddClassAlternate;
250 return delayedAddClassAlternate;
330 int n = 0, ninit = 0, nl = 0;
332 int nch = strlen(option);
335 Printf(
"\nDefined classes");
336 Printf(
"class version bits initialized");
337 Printf(
"================================================================");
343 if (nch && strcmp(option,
r->fName) && s.
Index(re) ==
kNPOS)
continue;
351 Printf(
"----------------------------------------------------------------");
352 Printf(
"Listed Classes: %4d Total classes: %4d initialized: %4d",nl,
n, ninit);
353 Printf(
"================================================================\n");
391 if (!cname || *cname == 0)
392 ::Fatal(
"TClassTable::Add()",
"Failed to deduce type for '%s'", info.name());
403 if (
r->fName &&
r->fInfo) {
412 ::Warning(
"TClassTable::Add",
"class %s already in TClassTable", cname);
458 const char *cname =
proto->GetName();
463 if (
r->fProto)
delete r->fProto;
467 proto->FillTClass(oldcl);
477 ::Warning(
"TClassTable::Add(TProtoClass*)",
"Called for existing class without a prior call add the dictionary function.");
505 if (strcmp(alternate,
a->fName)==0) {
506 if (strcmp(normName,
a->fNormName) != 0) {
507 fprintf(stderr,
"Error in TClassTable::AddAlternate: "
508 "Second registration of %s with a different normalized name (old: '%s', new: '%s')\n",
509 alternate,
a->fNormName, normName);
531 if (strcmp(cname,
r->fName)==0)
return kTRUE;
535 if (strcmp(cname,
a->fName)==0) {
536 normname =
a->fNormName;
560 if (!strcmp(
r->fName, cname)) {
588 if (strcmp(cname,
r->fName) == 0)
633 ::Info(
"GetDict",
"searches for %s", cname);
656 ::Info(
"GetDict",
"searches for %s at 0x%zx", info.name(), (
size_t)&info);
678 ::Info(
"GetDict",
"searches for %s", cname);
695 ::Info(
"GetDict",
"searches for %s", cname);
702 ::Info(
"GetDict",
"searches for %s", cname);
721 ::Info(
"GetDict",
"searches for %s", cname);
779 int n = 0, ninit = 0;
781 Printf(
"\nDefined classes");
782 Printf(
"class version bits initialized");
783 Printf(
"================================================================");
785 for (
UInt_t i = 0; i < last; i++) {
790 if (
gROOT->GetListOfClasses()->FindObject(
r->fName)) {
796 Printf(
"----------------------------------------------------------------");
797 Printf(
"Total classes: %4d initialized: %4d",
n, ninit);
798 Printf(
"================================================================\n");
844 const std::type_info& info,
849 auto r = std::unique_ptr<TClassRec>(
new TClassRec(
nullptr));
898 if (cname!=(
void*)-1)
899 Error(
"ResetClassVersion",
"Version number of %s can not be changed after first usage!",
903 Error(
"SetClassVersion",
"The class version (for %s) must be positive (value %d is ignored)",cl->
GetName(),newid);
905 if (cname==(
void*)-1) {
951 static Bool_t isInit = []() {
960 if (loc >= 1) classname.
Remove(loc);
typedef void(GLAPIENTRYP _GLUfuncptr)(void)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
TClass *(* DictFuncPtr_t)()
static std::mutex & GetClassTableMutex()
TClassTable * gClassTable
static int ClassComp(const void *a, const void *b)
R__EXTERN TClassTable * gClassTable
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
R__EXTERN TInterpreter * gCling
void Printf(const char *fmt,...)
char * StrDup(const char *str)
Duplicate the string str.
TClassAlt(const char *alternate, const char *normName, TClassAlt *next)
std::unique_ptr< TClassAlt > fNext
TClassRec(TClassRec *next)
const std::type_info * fInfo
IdMap_t::size_type size_type
IdMap_t::mapped_type mapped_type
void Add(const key_type &key, mapped_type &obj)
IdMap_t::key_type key_type
std::map< std::string, TClassRec * > IdMap_t
IdMap_t::const_iterator const_iterator
void Remove(const key_type &key)
mapped_type Find(const key_type &key) const
IdMap_t::size_type size_type
IdMap_t::mapped_type mapped_type
IdMap_t::const_iterator const_iterator
IdMap_t::key_type key_type
const std::string & GetNormalizedName() const
std::string fNormalizedName
NormalizeThenLock(const char *cname)
This class registers for all classes their name, id and dictionary function in a hash table.
static void PrintTable()
Print the class table.
static Int_t GetPragmaBits(const char *name)
Returns the pragma bits as specified in the LinkDef.h file.
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name).
static Version_t GetID(const char *cname)
Returns the ID of a class.
ROOT::TMapTypeToClassRec IdMap_t
static void SortTable()
Sort the class table by ascending class ID's.
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).
static void AddAlternate(const char *normname, const char *alternate)
static ROOT::TClassAlt ** fgAlternate
static void Terminate()
Deletes the class table (this static class function calls the dtor).
void Print(Option_t *option="") const
Print the class table.
static TProtoClass * GetProto(const char *cname)
Given the class name returns the TClassProto object for the class.
static std::atomic< UInt_t > fgTally
TClassTable()
TClassTable is a singleton (i.e. only one can exist per application).
static char * Next()
Returns next class from sorted class table.
static char * At(UInt_t index)
Returns class at index from sorted class table.
static Bool_t Check(const char *cname, std::string &normname)
static void Remove(const char *cname)
Remove a class from the class table.
static ROOT::TClassRec ** fgSortedTable
static ROOT::TClassRec ** fgTable
static Bool_t CheckClassTableInit()
Return true fs the table exist.
static void Add(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Add a class to the class table (this is a static function).
~TClassTable()
TClassTable singleton is deleted in Terminate().
static ROOT::TClassRec * FindElement(const char *cname, Bool_t insert)
Find a class by name in the class table (using hash of name).
TClass instances represent classes, structs and namespaces in the ROOT type system.
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
void SetClassVersion(Version_t version)
Private function.
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
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.
virtual bool UseRWLock(Bool_t enable=true)
Set this collection to use a RW lock upon access, making it thread safe.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual void RegisterTClassUpdate(TClass *oldcl, DictFuncPtr_t dict)=0
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetName() const
Returns name of object.
Collectable string class.
Mother of all ROOT objects.
UInt_t fBits
bit field status word
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.
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 Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Regular expression class.
const char * Data() const
TString & Remove(Ssiz_t pos)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
R__EXTERN TROOT * gROOTLocal
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
std::vector< std::pair< const char *, const char * > > & GetDelayedAddClassAlternate()
std::vector< std::unique_ptr< TClassRec > > & GetDelayedAddClass()
void AddClassAlternate(const char *normName, const char *alternate)
Global function called by GenerateInitInstance.
void RemoveClass(const char *cname)
Global function called by the dtor of a class's init class (see the ClassImp macro).
void AddClass(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Global function called by the ctor of a class's init class (see the ClassImp macro).
TNamed * RegisterClassTemplate(const char *name, const char *file, Int_t line)
Global function to register the implementation file and line of a class template (i....
static UInt_t ClassTableHash(const char *name, UInt_t size)
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.