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