Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 09:33:12

0001 // @(#)root/cont:$Id$
0002 // Author: Fons Rademakers   11/08/95
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TClassTable
0013 #define ROOT_TClassTable
0014 
0015 
0016 //////////////////////////////////////////////////////////////////////////
0017 //                                                                      //
0018 // TClassTable                                                          //
0019 //                                                                      //
0020 // This class registers for all classes their name, id and dictionary   //
0021 // function in a hash table.                                            //
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    // bits that can be set in pragmabits
0065    // clang-format off
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    // clang-format on
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)  //Table of known classes
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