File indexing completed on 2025-09-18 09:33:12
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TClassTable
0013 #define ROOT_TClassTable
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #include "TObject.h"
0026 #include <string>
0027 #include <atomic>
0028 #include <vector>
0029
0030 class TProtoClass;
0031
0032 namespace ROOT {
0033 class TClassAlt;
0034 class TClassRec;
0035 class TMapTypeToClassRec;
0036 }
0037
0038 class TClassTable : public TObject {
0039
0040 friend void ROOT::ResetClassVersion(TClass*, const char*, Short_t);
0041 friend class TROOT;
0042
0043 private:
0044 typedef ROOT::TMapTypeToClassRec IdMap_t;
0045 class NormalizeThenLock;
0046
0047 static ROOT::TClassAlt **fgAlternate;
0048 static ROOT::TClassRec **fgTable;
0049 static ROOT::TClassRec **fgSortedTable;
0050 static IdMap_t *fgIdMap;
0051 static UInt_t fgSize;
0052 static std::atomic<UInt_t> fgTally;
0053 static Bool_t fgSorted;
0054 static UInt_t fgCursor;
0055
0056 TClassTable();
0057
0058 static ROOT::TClassRec *FindElement(const char *cname, Bool_t insert);
0059 static void SortTable();
0060
0061 static Bool_t CheckClassTableInit();
0062
0063 public:
0064
0065
0066 enum {
0067 kNoStreamer = 0x01,
0068 kNoInputOperator = 0x02,
0069 kAutoStreamer = 0x04,
0070 kHasVersion = 0x08,
0071 kHasCustomStreamerMember = 0x10,
0072 kNtplForceNativeMode = 0x20,
0073 kNtplForceStreamerMode = 0x40
0074 };
0075
0076
0077 ~TClassTable();
0078
0079 static void Add(const char *cname, Version_t id,
0080 const std::type_info &info, DictFuncPtr_t dict,
0081 Int_t pragmabits);
0082 static void Add(TProtoClass *protoClass);
0083 static ROOT::TClassAlt *AddAlternate(const char *normname, const char *alternate);
0084 static std::vector<std::string> GetClassAlternativeNames(const char *cname);
0085 static char *At(UInt_t index);
0086 int Classes();
0087 static Bool_t Check(const char *cname, std::string &normname);
0088 static Version_t GetID(const char *cname);
0089 static Int_t GetPragmaBits(const char *name);
0090 static DictFuncPtr_t GetDict(const char *cname);
0091 static DictFuncPtr_t GetDict(const std::type_info& info);
0092 static DictFuncPtr_t GetDictNorm(const char *cname);
0093 static TProtoClass *GetProto(const char *cname);
0094 static TProtoClass *GetProtoNorm(const char *cname);
0095 static void Init();
0096 static char *Next();
0097 void Print(Option_t *option="") const override;
0098 static void PrintTable();
0099 static void Remove(const char *cname);
0100 static void RemoveAlternate(ROOT::TClassAlt *alt);
0101 static void Terminate();
0102
0103 ClassDefOverride(TClassTable,0)
0104 };
0105
0106 R__EXTERN TClassTable *gClassTable;
0107
0108 namespace ROOT {
0109 extern void AddClass(const char *cname, Version_t id, DictFuncPtr_t dict,
0110 Int_t pragmabits);
0111 extern void RemoveClass(const char *cname, TClass *cl);
0112 }
0113
0114 #endif