36 TNamed(*cl), fBase(cl->GetListOfBases()),
37 fEnums(cl->GetListOfEnums()), fSizeof(cl->
Size()), fCheckSum(cl->fCheckSum),
38 fCanSplit(cl->fCanSplit), fStreamerType(cl->fStreamerType), fProperty(cl->fProperty),
39 fClassProperty(cl->fClassProperty)
55 if (dataMembers && dataMembers->
GetSize() > 0) {
57 for (
auto * obj : *dataMembers) {
78 if (!precRd) precRd = rd;
81 if (clRD != clCurrent) {
194 for (
auto dm:
fData) {
222 Info(
"FillTClass",
"Returning w/o doing anything. %s is a STL collection.",cl->
GetName());
227 Info(
"FillTClass",
"Returning w/o doing anything. %s is a namespace.",cl->
GetName());
230 Error(
"FillTClass",
"TClass %s already initialized!", cl->
GetName());
244 if (element.IsAClass() ) {
290 temp->Add((
TEnum*) enumAsTObj);
308 if (cl->
fBase.load()) {
309 for (
auto base: *cl->
fBase) {
314 for (
auto dm: *cl->
fData) {
320 for (
auto en: *cl->
fEnums) {
321 ((
TEnum*)en)->SetClass(cl);
327 TClass* currentRDClass = cl;
334 if (element.IsAClass() ) {
349 "Cannot find TClass for %s; Creating an empty one in the kForwardDeclared state.",
355 if (!currentRDClass)
continue;
359 if (
TRealData* rd = element.CreateRealData(currentRDClass, cl,prevRealData, prevLevel)) {
363 Info(
"FillTClass",
"Real data for class %s is not empty - make a new one",cl->
GetName() );
372 prevLevel = element.fLevel;
380 Info(
"FillTClas",
"Real data for class %s is not empty - make a new one. Class has no Proto-realdata",cl->
GetName() );
410 fOffset(rd->GetThisOffset()),
452 "Cannot find data member # %d of class %s for parent %s!", fDMIndex, dmClass->
GetName(),
461 if (dm) realMemberName = dm->
GetName();
463 realMemberName =
TString(
"*")+realMemberName;
468 for (
int idim = 0; idim < dm->
GetArrayDim(); ++idim)
471 std::string typeNameBuf;
473 std::array<Int_t, 5> maxIndices;
478 for (
Int_t idim = 0; idim < ndim; ++idim) {
484 if (prevData && fLevel > 0 ) {
485 if (fLevel-prevLevel == 1)
487 else if (fLevel <= prevLevel) {
489 std::string prevName = prevData->
GetName();
491 std::string parentName;
492 for (
int i = 0; i < prevLevel-fLevel+1; ++i) {
493 parentName = prevName.substr(0, prevName.find_last_of(
".") );
494 prevName = parentName;
505 if (TestFlag(kIsTransient)) {
520 for (
auto * obj : *dmList) {
528 ::Error(
"TProtoClass::DataMemberIndex",
"data member %s is not found in class %s",
name, cl->
GetName());
540 for (
auto * obj : *dmList) {
549 ::
Error(
"TProtoClass::FindDataMember",
"data member with index %d is not found in class %s",index,cl->
GetName());
R__EXTERN Int_t gErrorIgnoreLevel
Each class (see TClass) has a linked list of its base class(es).
The ROOT global object gROOT contains a list of all defined classes.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Int_t fStreamerType
saved info to call Streamer
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
std::atomic< TList * > fBase
std::atomic< UInt_t > fCheckSum
std::atomic< TListOfEnums * > fEnums
std::atomic< Long_t > fProperty
Indicates whether this class can be split or not.
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
TList * GetListOfRealData() const
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
Long_t fOffsetStreamer
Properties that can only be evaluated at run-time.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
Long_t fClassProperty
Property.
TListOfDataMembers * fData
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
Int_t GetMaxIndex(Int_t dim) const
Return maximum index for array dimension "dim".
Int_t GetArrayDim() const
Return number of array dimensions.
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
TClass * GetClass() const
The TEnum class implements the enum type.
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
Bool_t fIsLoaded
Holder of TEnum for unloaded Enums.
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' into this collection.
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual void AddLast(TObject *obj)
Add object at the end of the list.
virtual void Clear(Option_t *option="")
Remove all objects from the list.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Int_t TestBits(UInt_t f) const
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Bool_t FillTClass(TClass *pcl)
Move data from this TProtoClass into cl.
virtual ~TProtoClass()
Destructor.
const char * GetClassName(Int_t index) const
std::vector< TDataMember * > fData
void Delete(Option_t *opt="")
Delete the containers that are usually owned by their TClass.
std::vector< TProtoRealData > fPRealData
std::vector< TString > fDepClasses
static Int_t DataMemberIndex(TClass *cl, const char *name)
static TDataMember * FindDataMember(TClass *cl, Int_t index)
The TRealData class manages the effective list of all data members for a given class.
TDataMember * GetDataMember() const
virtual const char * GetName() const
Returns name of object.
void SetIsObject(Bool_t isObject)
const char * Data() const
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
bool IsStdArray(std::string_view name)
bool GetStdArrayProperties(const char *typeName, std::string &typeNameBuf, std::array< int, 5 > &maxIndices, int &ndim)
void SetFlag(UInt_t f, Bool_t on=kTRUE)
TRealData * CreateRealData(TClass *currentClass, TClass *parent, TRealData *parentData, int prevLevel) const
Create a TRealData from this, with its data member coming from dmClass.
virtual ~TProtoRealData()
Destructor to pin vtable.