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