Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:11:50

0001 // @(#)root/meta:$Id$
0002 // Author: Philippe Canal   23/2/02
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2002, Rene Brun, Fons Rademakers and al.           *
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_Rtypes
0013 // Include Rtypes.h outside of the code guard to insure the intended
0014 // ordering of Rtypes.h and TGenericClassInfo.h
0015 #include "Rtypes.h"
0016 #endif
0017 
0018 #ifndef ROOT_TGenericClassInfo
0019 #define ROOT_TGenericClassInfo
0020 
0021 #include "TSchemaHelper.h"
0022 #include <vector>
0023 #include <string>
0024 
0025 // Forward declarations
0026 class TVirtualIsAProxy;
0027 
0028 
0029 namespace ROOT {
0030 
0031    namespace Internal {
0032       /// Returns a string with the demangled and normalized name for the given type.
0033       std::string GetDemangledTypeName(const std::type_info&);
0034    }
0035 
0036    namespace Detail {
0037       class TCollectionProxyInfo;
0038    }
0039 
0040    class TGenericClassInfo {
0041       // This class in not inlined because it is used is non time critical
0042       // section (the dictionaries) and inline would lead to too much
0043       // repetition of the code (once per class!).
0044 
0045       const Internal::TInitBehavior *fAction;
0046       TClass                     *fClass;
0047       const char                 *fClassName;
0048       const char                 *fDeclFileName;
0049       Int_t                       fDeclFileLine;
0050       DictFuncPtr_t               fDictionary;
0051       const std::type_info       &fInfo;
0052       const char                 *fImplFileName;
0053       Int_t                       fImplFileLine;
0054       TVirtualIsAProxy           *fIsA;
0055       Int_t                       fVersion;
0056       MergeFunc_t                 fMerge;
0057       ResetAfterMergeFunc_t       fResetAfterMerge;
0058       NewFunc_t                   fNew;
0059       NewArrFunc_t                fNewArray;
0060       DelFunc_t                   fDelete;
0061       DelArrFunc_t                fDeleteArray;
0062       DesFunc_t                   fDestructor;
0063       DirAutoAdd_t                fDirAutoAdd;
0064       TClassStreamer             *fStreamer;
0065       ClassStreamerFunc_t         fStreamerFunc;
0066       ClassConvStreamerFunc_t     fConvStreamerFunc;
0067       TVirtualCollectionProxy    *fCollectionProxy;
0068       Int_t                       fSizeof;
0069       Int_t                       fPragmaBits;
0070       Detail::TCollectionProxyInfo *fCollectionProxyInfo;
0071       Detail::TCollectionProxyInfo *fCollectionStreamerInfo;
0072       std::vector<ROOT::Internal::TSchemaHelper>  fReadRules;
0073       std::vector<ROOT::Internal::TSchemaHelper>  fReadRawRules;
0074       std::vector<ROOT::TClassAlt*>               fAlternate;
0075 
0076    public:
0077       TGenericClassInfo(const char *fullClassname,
0078                        const char *declFileName, Int_t declFileLine,
0079                        const std::type_info &info, const Internal::TInitBehavior *action,
0080                        DictFuncPtr_t dictionary,
0081                        TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof);
0082 
0083       TGenericClassInfo(const char *fullClassname, Int_t version,
0084                        const char *declFileName, Int_t declFileLine,
0085                        const std::type_info &info, const Internal::TInitBehavior *action,
0086                        DictFuncPtr_t dictionary,
0087                        TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof);
0088 
0089       TGenericClassInfo(const char *fullClassname, Int_t version,
0090                         const char *declFileName, Int_t declFileLine,
0091                         const Internal::TInitBehavior *action,
0092                         DictFuncPtr_t dictionary, Int_t pragmabits);
0093 
0094       void Init(Int_t pragmabits);
0095       ~TGenericClassInfo();
0096 
0097       const Internal::TInitBehavior    &GetAction() const;
0098       TClass                           *GetClass();
0099       const char                       *GetClassName() const;
0100       Detail::TCollectionProxyInfo     *GetCollectionProxyInfo() const;
0101       Detail::TCollectionProxyInfo     *GetCollectionStreamerInfo() const;
0102       const char                       *GetDeclFileName() const;
0103       Int_t                             GetDeclFileLine() const;
0104       DelFunc_t                         GetDelete() const;
0105       DelArrFunc_t                      GetDeleteArray() const;
0106       DesFunc_t                         GetDestructor() const;
0107       DirAutoAdd_t                      GetDirectoryAutoAdd() const;
0108       const char                       *GetImplFileName();
0109       Int_t                             GetImplFileLine();
0110       const std::type_info             &GetInfo() const;
0111       TVirtualIsAProxy                 *GetIsA() const;
0112       NewFunc_t                         GetNew() const;
0113       NewArrFunc_t                      GetNewArray() const;
0114       const std::vector<ROOT::Internal::TSchemaHelper> &GetReadRawRules() const;
0115       const std::vector<ROOT::Internal::TSchemaHelper> &GetReadRules() const;
0116       Int_t                             GetVersion() const;
0117 
0118       TClass                           *IsA(const void *obj);
0119 
0120       void                              AdoptAlternate(ROOT::TClassAlt *alt);
0121       Short_t                           AdoptStreamer(TClassStreamer*);
0122       Short_t                           AdoptCollectionProxy(TVirtualCollectionProxy*);
0123       void                              AdoptCollectionProxyInfo(Detail::TCollectionProxyInfo*);
0124       void                              AdoptCollectionStreamerInfo(Detail::TCollectionProxyInfo*);
0125       Int_t                             SetDeclFile(const char *file, Int_t line);
0126       void                              SetDelete(DelFunc_t deleteFunc);
0127       void                              SetDeleteArray(DelArrFunc_t deleteArrayFunc);
0128       void                              SetDestructor(DesFunc_t destructorFunc);
0129       void                              SetDirectoryAutoAdd(DirAutoAdd_t dirAutoAdd);
0130       void                              SetFromTemplate();
0131       Int_t                             SetImplFile(const char *file, Int_t line);
0132       void                              SetMerge(MergeFunc_t);
0133       void                              SetResetAfterMerge(ResetAfterMergeFunc_t);
0134       void                              SetNew(NewFunc_t newFunc);
0135       void                              SetNewArray(NewArrFunc_t newArrayFunc);
0136       void                              SetReadRawRules( const std::vector<ROOT::Internal::TSchemaHelper>& rules );
0137       void                              SetReadRules( const std::vector<ROOT::Internal::TSchemaHelper>& rules );
0138       Short_t                           SetStreamer(ClassStreamerFunc_t);
0139       void                              SetStreamerFunc(ClassStreamerFunc_t);
0140       void                              SetConvStreamerFunc(ClassConvStreamerFunc_t);
0141       Short_t                           SetVersion(Short_t version);
0142 
0143       //   protected:
0144    private:
0145       void CreateRuleSet( std::vector<ROOT::Internal::TSchemaHelper>& vect, Bool_t ProcessReadRules );
0146       TGenericClassInfo(const TGenericClassInfo &) = delete;
0147       TGenericClassInfo& operator=(const TGenericClassInfo &) = delete;
0148 
0149    private:
0150       TGenericClassInfo();
0151 
0152    };
0153 
0154 }
0155 
0156 #endif