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() ) {
287 temp->Add((
TEnum*) enumAsTObj);
305 if (cl->
fBase.load()) {
306 for (
auto base: *cl->
fBase) {
311 for (
auto dm: *cl->
fData) {
317 for (
auto en: *cl->
fEnums) {
318 ((
TEnum*)en)->SetClass(cl);
324 TClass* currentRDClass = cl;
331 if (element.IsAClass() ) {
346 "Cannot find TClass for %s; Creating an empty one in the kForwardDeclared state.",
352 if (!currentRDClass)
continue;
356 if (
TRealData* rd = element.CreateRealData(currentRDClass, cl,prevRealData, prevLevel)) {
360 Info(
"FillTClass",
"Real data for class %s is not empty - make a new one",cl->
GetName() );
369 prevLevel = element.fLevel;
377 Info(
"FillTClas",
"Real data for class %s is not empty - make a new one. Class has no Proto-realdata",cl->
GetName() );
407 fOffset(rd->GetThisOffset()),
449 "Cannot find data member # %d of class %s for parent %s!", fDMIndex, dmClass->
GetName(),
458 if (dm) realMemberName = dm->
GetName();
460 realMemberName =
TString(
"*")+realMemberName;
465 for (
int idim = 0; idim < dm->
GetArrayDim(); ++idim)
468 std::string typeNameBuf;
470 std::array<Int_t, 5> maxIndices;
475 for (
Int_t idim = 0; idim < ndim; ++idim) {
481 if (prevData && fLevel > 0 ) {
482 if (fLevel-prevLevel == 1)
484 else if (fLevel <= prevLevel) {
486 std::string prevName = prevData->
GetName();
488 std::string parentName;
489 for (
int i = 0; i < prevLevel-fLevel+1; ++i) {
490 parentName = prevName.substr(0, prevName.find_last_of(
".") );
491 prevName = parentName;
502 if (TestFlag(kIsTransient)) {
517 for (
auto * obj : *dmList) {
525 ::Error(
"TProtoClass::DataMemberIndex",
"data member %s is not found in class %s",
name, cl->
GetName());
537 for (
auto * obj : *dmList) {
546 ::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).
TClass instances represent classes, structs and namespaces in the ROOT type system.
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.