Logo ROOT   6.08/07
Reference Guide
TProtoClass.h
Go to the documentation of this file.
1 // @(#)root/meta:$Id$
2 // Author: Axel Naumann 2014-04-28
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2014, Rene Brun and Fons Rademakers. *
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 
13 #ifndef ROOT_TProtoClass
14 #define ROOT_TProtoClass
15 
16 #ifndef ROOT_TNamed
17 #include "TNamed.h"
18 #endif
19 
20 class TClass;
21 class TList;
22 class TRealData;
23 
24 #include "TDataMember.h"
25 
26 #include <vector>
27 
28 //////////////////////////////////////////////////////////////////////////
29 // //
30 // TProtoClass //
31 // //
32 // Stores enough information to create a TClass from a dictionary //
33 // without interpreter information. //
34 // //
35 //////////////////////////////////////////////////////////////////////////
36 
37 class TProtoClass: public TNamed {
38 public:
39  struct TProtoRealData {
40  Long_t fOffset; // data member offset
41  Int_t fDMIndex; // index of data member in vector of data members
42  Int_t fLevel; // member level (0 : belong to this class, 1 is a data member of a data member object, etc...)
43  Int_t fClassIndex; // index of class belonging to in list of dep classes
44  char fStatusFlag; // status of the real data member (if bit 0 set is an object, if bit 1 set is transient if bit 2 set is a pointer)
45 
46  enum {
47  kIsObject = BIT(0), // member is object
48  kIsTransient = BIT(1), // data member is transient
49  kIsPointer = BIT(2), // data member is a pointer
50  kBitMask = 0x000000ff
51  };
52 
53  public:
54  bool IsAClass() const { return fClassIndex >= 0; }
55  TProtoRealData() : fOffset(0), fDMIndex(-1), fLevel(0), fClassIndex(-1), fStatusFlag(0) {}
56  TProtoRealData(const TRealData *rd);
57  virtual ~TProtoRealData();
58  TRealData *CreateRealData(TClass *currentClass, TClass *parent, TRealData * parentData, int prevLevel) const;
59 
60  Bool_t TestFlag(UInt_t f) const { return (Bool_t) ((fStatusFlag & f) != 0); }
61  void SetFlag(UInt_t f, Bool_t on = kTRUE) {
62  if (on)
63  fStatusFlag |= f & kBitMask;
64  else
65  fStatusFlag &= ~(f & kBitMask);
66  }
67 
68  ClassDef(TProtoRealData, 3);//Persistent version of TRealData
69  };
70 
71 private:
72  TList *fBase; // List of base classes
73  TList *fEnums; // List of enums in this scope
74  std::vector<TProtoRealData> fPRealData; // List of TProtoRealData
75  std::vector<TDataMember *> fData; // collection of data members
76  std::vector<TString> fDepClasses; // list of dependent classes
77  Int_t fSizeof; // Size of the class
78  UInt_t fCheckSum; //checksum of data members and base classes
79  Int_t fCanSplit; // Whether this class can be split
80  Int_t fStreamerType; // Which streaming method to use
81  Long_t fProperty; // Class properties, see EProperties
82  Long_t fClassProperty; // Class C++ properties, see EClassProperties
83  Long_t fOffsetStreamer; // Offset to streamer function
84 
85  TProtoClass(const TProtoClass &) = delete;
86  TProtoClass &operator=(const TProtoClass &) = delete;
87 
88  const char * GetClassName(Int_t index) const { return (index >= 0) ? fDepClasses[index].Data() : 0; }
89 
90  // compute index of data member in the list
91  static Int_t DataMemberIndex(TClass * cl, const char * name);
92  // find data member given an index
93  static TDataMember * FindDataMember(TClass * cl, Int_t index);
94 
95 public:
97  fBase(0), fEnums(0), fSizeof(0), fCheckSum(0), fCanSplit(0),
98  fStreamerType(0), fProperty(0), fClassProperty(0),
99  fOffsetStreamer(0) {
100  }
101 
103  TProtoClass(TClass *cl);
104  virtual ~TProtoClass();
105 
106  Bool_t FillTClass(TClass *pcl);
108  return fEnums;
109  };
110  void Delete(Option_t *opt = "");
111 
112  int GetSize() { return fSizeof; }
113  TList * GetBaseList() { return fBase; }
114  //TList * GetDataList() { return fData; }
115  TList * GetEnumList() { return fEnums; }
116  std::vector<TProtoRealData> & GetPRDList() { return fPRealData; }
117  std::vector<TDataMember *> & GetData() { return fData; }
118  std::vector<TString> & GetDepClasses() { return fDepClasses; }
119 
120 
121  ClassDef(TProtoClass, 2); //Persistent TClass
122 };
123 
124 #endif
Long_t fProperty
Definition: TProtoClass.h:81
const TList * GetListOfEnums()
Definition: TProtoClass.h:107
const char Option_t
Definition: RtypesCore.h:62
All ROOT classes may have RTTI (run time type identification) support added.
Definition: TDataMember.h:33
const char * GetClassName(Int_t index) const
Definition: TProtoClass.h:88
#define BIT(n)
Definition: Rtypes.h:120
Persistent version of a TClass.
Definition: TProtoClass.h:37
UInt_t fCheckSum
Definition: TProtoClass.h:78
std::vector< TString > & GetDepClasses()
Definition: TProtoClass.h:118
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TList * fEnums
Definition: TProtoClass.h:73
Int_t fStreamerType
Definition: TProtoClass.h:80
Bool_t TestFlag(UInt_t f) const
Definition: TProtoClass.h:60
void Delete(Option_t *opt="")
Delete the containers that are usually owned by their TClass.
#define ClassDef(name, id)
Definition: Rtypes.h:254
std::vector< TProtoRealData > & GetPRDList()
Definition: TProtoClass.h:116
Bool_t FillTClass(TClass *pcl)
Move data from this TProtoClass into cl.
TList * GetEnumList()
Definition: TProtoClass.h:115
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
std::vector< TDataMember * > fData
Definition: TProtoClass.h:75
virtual ~TProtoRealData()
Destructor to pin vtable.
Int_t fCanSplit
Definition: TProtoClass.h:79
TProtoClass & operator=(const TProtoClass &)=delete
A doubly linked list.
Definition: TList.h:47
int GetSize()
Definition: TProtoClass.h:112
virtual ~TProtoClass()
Destructor.
Int_t fSizeof
Definition: TProtoClass.h:77
unsigned int UInt_t
Definition: RtypesCore.h:42
The TRealData class manages the effective list of all data members for a given class.
Definition: TRealData.h:34
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:81
std::vector< TDataMember * > & GetData()
Definition: TProtoClass.h:117
long Long_t
Definition: RtypesCore.h:50
Long_t fClassProperty
Definition: TProtoClass.h:82
double f(double x)
void SetFlag(UInt_t f, Bool_t on=kTRUE)
Definition: TProtoClass.h:61
TList * GetBaseList()
Definition: TProtoClass.h:113
TList * fBase
Definition: TProtoClass.h:72
std::vector< TString > fDepClasses
Definition: TProtoClass.h:76
Long_t fOffsetStreamer
Definition: TProtoClass.h:83
static TDataMember * FindDataMember(TClass *cl, Int_t index)
const Bool_t kTRUE
Definition: Rtypes.h:91
char name[80]
Definition: TGX11.cxx:109
static Int_t DataMemberIndex(TClass *cl, const char *name)
TRealData * CreateRealData(TClass *currentClass, TClass *parent, TRealData *parentData, int prevLevel) const
Create a TRealData from this, with its data member coming from dmClass.
std::vector< TProtoRealData > fPRealData
Definition: TProtoClass.h:74