1    	// @(#)root/base:$Id$
2    	// Author: Philippe Canal   23/2/02
3    	
4    	/*************************************************************************
5    	 * Copyright (C) 1995-2002, Rene Brun, Fons Rademakers and al.           *
6    	 * All rights reserved.                                                  *
7    	 *                                                                       *
8    	 * For the licensing terms see $ROOTSYS/LICENSE.                         *
9    	 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
10   	 *************************************************************************/
11   	
12   	#ifndef ROOT_TGenericClassInfo
13   	#define ROOT_TGenericClassInfo
14   	
15   	#include <vector>
16   	//#ifndef ROOT_TSchemaHelper
17   	#include "TSchemaHelper.h"
18   	//#endif
19   	//#ifndef ROOT_Rtypes
20   	//#inlcude "Rtypes.h"
21   	//#endif
22   	
23   	// Forward declarations
24   	class TVirtualIsAProxy;
25   	//class TClass;
26   	//class TClassStreamer;
27   	//class TVirtualCollectionProxy;
28   	//class TCollectionProxyInfo;
29   	
30   	
31   	namespace ROOT {
32   	
33   	   class TCollectionProxyInfo;
34   	
35   	   class TGenericClassInfo {
36   	      // This class in not inlined because it is used is non time critical
37   	      // section (the dictionaries) and inline would lead to too much
38   	      // repetition of the code (once per class!).
39   	
40   	      const TInitBehavior        *fAction;
41   	      TClass                     *fClass;
42   	      const char                 *fClassName;
43   	      const char                 *fDeclFileName;
44   	      Int_t                       fDeclFileLine;
45   	      VoidFuncPtr_t               fDictionary;
46   	      const type_info            &fInfo;
47   	      const char                 *fImplFileName;
48   	      Int_t                       fImplFileLine;
49   	      TVirtualIsAProxy           *fIsA;
50   	      ShowMembersFunc_t           fShowMembers;
51   	      Int_t                       fVersion;
52   	      MergeFunc_t                 fMerge;
53   	      ResetAfterMergeFunc_t       fResetAfterMerge;
54   	      NewFunc_t                   fNew;
55   	      NewArrFunc_t                fNewArray;
56   	      DelFunc_t                   fDelete;
57   	      DelArrFunc_t                fDeleteArray;
58   	      DesFunc_t                   fDestructor;
59   	      DirAutoAdd_t                fDirAutoAdd;
60   	      TClassStreamer             *fStreamer;
61   	      ClassStreamerFunc_t         fStreamerFunc;
62   	      TVirtualCollectionProxy    *fCollectionProxy;
63   	      Int_t                       fSizeof;
64   	      TCollectionProxyInfo       *fCollectionProxyInfo;
65   	      TCollectionProxyInfo       *fCollectionStreamerInfo;
66   	      std::vector<ROOT::TSchemaHelper>  fReadRules;
67   	      std::vector<ROOT::TSchemaHelper>  fReadRawRules;
68   	
69   	   public:
70   	      TGenericClassInfo(const char *fullClassname,
71   	                       const char *declFileName, Int_t declFileLine,
72   	                       const type_info &info, const TInitBehavior *action,
73   	                       ShowMembersFunc_t showmembers, VoidFuncPtr_t dictionary,
74   	                       TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof);
75   	
76   	      TGenericClassInfo(const char *fullClassname, Int_t version,
77   	                       const char *declFileName, Int_t declFileLine,
78   	                       const type_info &info, const TInitBehavior *action,
79   	                       ShowMembersFunc_t showmembers,  VoidFuncPtr_t dictionary,
80   	                       TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof);
81   	
82   	      TGenericClassInfo(const char *fullClassname, Int_t version,
83   	                       const char *declFileName, Int_t declFileLine,
84   	                       const type_info &info, const TInitBehavior *action,
85   	                       VoidFuncPtr_t dictionary,
86   	                       TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof);
87   	
88   	      TGenericClassInfo(const char *fullClassname, Int_t version,
89   	                        const char *declFileName, Int_t declFileLine,
90   	                        const TInitBehavior *action,
91   	                        VoidFuncPtr_t dictionary, Int_t pragmabits);
92   	
93   	      void Init(Int_t pragmabits);
94   	      ~TGenericClassInfo();
95   	
96   	      const TInitBehavior              &GetAction() const;
97   	      TClass                           *GetClass();
98   	      const char                       *GetClassName() const;
99   	      TCollectionProxyInfo             *GetCollectionProxyInfo() const;
100  	      TCollectionProxyInfo             *GetCollectionStreamerInfo() const;
101  	      const char                       *GetDeclFileName() const;
102  	      Int_t                             GetDeclFileLine() const;
103  	      DelFunc_t                         GetDelete() const;
104  	      DelArrFunc_t                      GetDeleteArray() const;
105  	      DesFunc_t                         GetDestructor() const;
106  	      DirAutoAdd_t                      GetDirectoryAutoAdd() const;
107  	      const char                       *GetImplFileName();
108  	      Int_t                             GetImplFileLine();
109  	      const type_info                  &GetInfo() const;
110  	      TVirtualIsAProxy                 *GetIsA() const;
111  	      NewFunc_t                         GetNew() const;
112  	      NewArrFunc_t                      GetNewArray() const;
113  	      const std::vector<ROOT::TSchemaHelper> &GetReadRawRules() const;
114  	      const std::vector<ROOT::TSchemaHelper> &GetReadRules() const;
115  	      ShowMembersFunc_t                 GetShowMembers() const;
116  	      Int_t                             GetVersion() const;
117  	
118  	      TClass                           *IsA(const void *obj);
119  	
120  	      Short_t                           AdoptStreamer(TClassStreamer*);
121  	      Short_t                           AdoptCollectionProxy(TVirtualCollectionProxy*);
122  	      void                              AdoptCollectionProxyInfo(TCollectionProxyInfo*);
123  	      void                              AdoptCollectionStreamerInfo(TCollectionProxyInfo*);
124  	      Int_t                             SetDeclFile(const char *file, Int_t line);
125  	      void                              SetDelete(DelFunc_t deleteFunc);
126  	      void                              SetDeleteArray(DelArrFunc_t deleteArrayFunc);
127  	      void                              SetDestructor(DesFunc_t destructorFunc);
128  	      void                              SetDirectoryAutoAdd(DirAutoAdd_t dirAutoAdd);
129  	      void                              SetFromTemplate();
130  	      Int_t                             SetImplFile(const char *file, Int_t line);
131  	      void                              SetMerge(MergeFunc_t);
132  	      void                              SetResetAfterMerge(ResetAfterMergeFunc_t);
133  	      void                              SetNew(NewFunc_t newFunc);
134  	      void                              SetNewArray(NewArrFunc_t newArrayFunc);
135  	      void                              SetReadRawRules( const std::vector<ROOT::TSchemaHelper>& rules );
136  	      void                              SetReadRules( const std::vector<ROOT::TSchemaHelper>& rules );
137  	      Short_t                           SetStreamer(ClassStreamerFunc_t);
138  	      void                              SetStreamerFunc(ClassStreamerFunc_t);
139  	      Short_t                           SetVersion(Short_t version);
140  	
141  	      //   protected:
142  	   private:
143  	      void CreateRuleSet( std::vector<ROOT::TSchemaHelper>& vect, Bool_t ProcessReadRules );
144  	      TGenericClassInfo(const TGenericClassInfo&); // Not implemented
145  	      TGenericClassInfo& operator=(const TGenericClassInfo&); // Not implemented
146  	
147  	   private:
148  	      TGenericClassInfo();
149  	
150  	   };
151  	
152  	}
153  	
154  	#endif
155