Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
JROOT::JRootClass Struct Reference

Auxiliary class to manage access to base classes and data members of ROOT class. More...

#include <JRootClass.hh>

Inheritance diagram for JROOT::JRootClass:
JLANG::JEquals< JFirst_t, JSecond_t > JROOT::JRootAddressableClass< const char * > JROOT::JRootAddressableClass< char * > JROOT::JRootAddressableClass< JPointer_t > JROOT::JRootWritableClass JROOT::JRootReadableClass

Public Member Functions

template<class JType_t >
 JRootClass (const JType< JType_t > &type)
 Constructor. More...
 
template<class JType_t , class JClass_t >
 JRootClass (JType_t JClass_t::*pd)
 Constructor. More...
 
TDictionary * getDictionary () const
 Get dictionary. More...
 
int getOffset () const
 Get offset of this class with respect to parent class. More...
 
TClass * getClass () const
 Get class. More...
 
const char * getTypename () const
 Get type name. More...
 
bool is_valid () const
 Check validity of this class. More...
 
bool equals (const JRootClass &object) const
 Test equality of ROOT classes. More...
 
JRootClass find (const char *const name, const bool option=true) const
 Find base class or data member with given name within current class. More...
 
JRootClass get (const TDataMember &data_member) const
 Get ROOT class of given data member. More...
 
JRootClass get (const TBaseClass &base_class) const
 Get ROOT class of given base class. More...
 
void print (std::ostream &out) const
 Print ROOT class information. More...
 

Static Public Member Functions

static bool is_class (const char *const name)
 Check name of class against ROOT classes. More...
 
static bool is_class (const TBaseClass &base_class)
 Check base class against ROOT class names. More...
 
static bool is_class (const TDataMember &data_member)
 Check data member against ROOT class names. More...
 
static bool is_STLcontainer (const TBaseClass &base_class)
 Check if base class is STL container. More...
 
static bool is_STLcontainer (const TDataMember &data_member)
 Check if data member is STL container. More...
 
static bool is_STLstring (const TDataMember &data_member)
 Check if data member is STL string. More...
 
static bool is_static (const TDataMember &data_member)
 Check if data member is static. More...
 
static bool is_tobject_member (const char *name)
 Check if name is one of TObject own data members (fBits or fUniqueID, for Root <= 6.30.04 at least) More...
 

Protected Member Functions

 JRootClass ()
 Default constructor. More...
 
 JRootClass (TDictionary *dictionary, int offset)
 Constructor. More...
 
void print (std::ostream &out, const std::string &prefix) const
 Print ROOT class information. More...
 

Static Protected Member Functions

static void print (std::ostream &out, const std::string &name, const std::string &type)
 Print ROOT class information. More...
 

Protected Attributes

TDictionary * dictionary
 pointer to ROOT dictionary More...
 
int offset
 offset with respect to data structure [B] More...
 

Detailed Description

Auxiliary class to manage access to base classes and data members of ROOT class.

Definition at line 41 of file JRootClass.hh.

Constructor & Destructor Documentation

◆ JRootClass() [1/4]

template<class JType_t >
JROOT::JRootClass::JRootClass ( const JType< JType_t > &  type)
inline

Constructor.

Parameters
typedata type

Definition at line 149 of file JRootClass.hh.

149  :
150  dictionary(TDictionary::GetDictionary(typeid(JType_t))),
151  offset(0)
152  {}
TDictionary * dictionary
pointer to ROOT dictionary
Definition: JRootClass.hh:326
int offset
offset with respect to data structure [B]
Definition: JRootClass.hh:327

◆ JRootClass() [2/4]

template<class JType_t , class JClass_t >
JROOT::JRootClass::JRootClass ( JType_t JClass_t::*  pd)
inline

Constructor.

Parameters
pdpointer to C++ data member

Definition at line 161 of file JRootClass.hh.

161  :
162  dictionary(TDictionary::GetDictionary(typeid(JType_t))),
163  offset((char*) &(((JClass_t*) NULL)->*pd) - (char*) NULL)
164  {}

◆ JRootClass() [3/4]

JROOT::JRootClass::JRootClass ( )
inlineprotected

Default constructor.

Definition at line 333 of file JRootClass.hh.

333  :
334  dictionary(NULL),
335  offset(0)
336  {}

◆ JRootClass() [4/4]

JROOT::JRootClass::JRootClass ( TDictionary *  dictionary,
int  offset 
)
inlineprotected

Constructor.

Parameters
dictionarypointer to dictionary
offsetoffset

Definition at line 345 of file JRootClass.hh.

346  :
348  offset (offset)
349  {}

Member Function Documentation

◆ is_class() [1/3]

static bool JROOT::JRootClass::is_class ( const char *const  name)
inlinestatic

Check name of class against ROOT classes.

Parameters
namename of class
Returns
true if name of class corresponds to genuine class; else false

Definition at line 50 of file JRootClass.hh.

51  {
52  return (name != NULL &&
53  strcmp(name, TClass ::Class()->GetName()) != 0 &&
54  strcmp(name, TObject::Class()->GetName()) != 0 &&
55  strcmp(name, "_Rb_tree_node_base") != 0 &&
56  strcmp(name, "fgIsA") != 0 &&
57  strcmp(name, "atomic<TClass*>") != 0);
58  }

◆ is_class() [2/3]

static bool JROOT::JRootClass::is_class ( const TBaseClass &  base_class)
inlinestatic

Check base class against ROOT class names.

Parameters
base_classbase class
Returns
true if valid class name; else false

Definition at line 67 of file JRootClass.hh.

68  {
69  return is_class(base_class.GetName());
70  }
static bool is_class(const char *const name)
Check name of class against ROOT classes.
Definition: JRootClass.hh:50

◆ is_class() [3/3]

static bool JROOT::JRootClass::is_class ( const TDataMember &  data_member)
inlinestatic

Check data member against ROOT class names.

Parameters
data_memberdata member
Returns
true if valid class name; else false

Definition at line 79 of file JRootClass.hh.

80  {
81  return is_class(data_member.GetTypeName());
82  }

◆ is_STLcontainer() [1/2]

static bool JROOT::JRootClass::is_STLcontainer ( const TBaseClass &  base_class)
inlinestatic

Check if base class is STL container.

Parameters
base_classbase class
Returns
true if STL congtainer; else false

Definition at line 91 of file JRootClass.hh.

92  {
93  return (const_cast<TBaseClass&>(base_class).IsSTLContainer() != ROOT::kNotSTL);
94  }

◆ is_STLcontainer() [2/2]

static bool JROOT::JRootClass::is_STLcontainer ( const TDataMember &  data_member)
inlinestatic

Check if data member is STL container.

Parameters
data_memberdata member
Returns
true if STL congtainer; else false

Definition at line 103 of file JRootClass.hh.

104  {
105  return (const_cast<TDataMember&>(data_member).IsSTLContainer() != ROOT::kNotSTL);
106  }

◆ is_STLstring()

static bool JROOT::JRootClass::is_STLstring ( const TDataMember &  data_member)
inlinestatic

Check if data member is STL string.

Parameters
data_memberdata member
Returns
true if STL string; else false

Definition at line 115 of file JRootClass.hh.

116  {
117  return (strcmp(data_member.GetFullTypeName(), "string") == 0 ||
118  strcmp(data_member.GetFullTypeName(), "const string") == 0);
119  }

◆ is_static()

static bool JROOT::JRootClass::is_static ( const TDataMember &  data_member)
inlinestatic

Check if data member is static.

Parameters
data_memberdata member
Returns
true if static; else false

Definition at line 128 of file JRootClass.hh.

129  {
130  return (data_member.Property() & kIsStatic);
131  }

◆ is_tobject_member()

static bool JROOT::JRootClass::is_tobject_member ( const char *  name)
inlinestatic

Check if name is one of TObject own data members (fBits or fUniqueID, for Root <= 6.30.04 at least)

Definition at line 138 of file JRootClass.hh.

139  {
140  TClass* o_class = TClass::GetClass<TObject>();
141  return o_class->GetListOfRealData()->FindObject(name) != nullptr;
142  }

◆ getDictionary()

TDictionary* JROOT::JRootClass::getDictionary ( ) const
inline

Get dictionary.

Returns
pointer to dictionary

Definition at line 172 of file JRootClass.hh.

173  {
174  return dictionary;
175  }

◆ getOffset()

int JROOT::JRootClass::getOffset ( ) const
inline

Get offset of this class with respect to parent class.

Returns
offset

Definition at line 183 of file JRootClass.hh.

184  {
185  return offset;
186  }

◆ getClass()

TClass* JROOT::JRootClass::getClass ( ) const
inline

Get class.

Returns
pointer to class

Definition at line 194 of file JRootClass.hh.

195  {
196  return dynamic_cast<TClass*>(dictionary);
197  }

◆ getTypename()

const char* JROOT::JRootClass::getTypename ( ) const
inline

Get type name.

Returns
type name

Definition at line 205 of file JRootClass.hh.

206  {
207  if (dictionary != NULL)
208  return dictionary->GetName();
209  else
210  return NULL;
211  }

◆ is_valid()

bool JROOT::JRootClass::is_valid ( ) const
inline

Check validity of this class.

Returns
true if valid class; else false

Definition at line 219 of file JRootClass.hh.

220  {
221  return (this->getDictionary() != NULL && is_class(this->getTypename()));
222  }
TDictionary * getDictionary() const
Get dictionary.
Definition: JRootClass.hh:172
const char * getTypename() const
Get type name.
Definition: JRootClass.hh:205

◆ equals()

bool JROOT::JRootClass::equals ( const JRootClass object) const
inline

Test equality of ROOT classes.

Parameters
objectROOT class
Returns
true if both ROOT classes are same type; else false

Definition at line 231 of file JRootClass.hh.

232  {
233  return (this-> getTypename() != NULL &&
234  object.getTypename() != NULL &&
235  strcmp(this->getTypename(), object.getTypename()) == 0);
236  }

◆ find()

JRootClass JROOT::JRootClass::find ( const char *const  name,
const bool  option = true 
) const
inline

Find base class or data member with given name within current class.

Parameters
namename of base class or data member
optioncase sensitivity
Returns
ROOT class

Definition at line 246 of file JRootClass.hh.

247  {
248  if (name != NULL && strlen(name) != 0) {
249 
250  if (strcmp(getTypename(), name) == 0) {
251  return *this;
252  }
253 
254  if (this->getClass() != NULL) {
255 
256  // check for data member
257 
258  for (std::unique_ptr<TIterator> i(this->getClass()->GetListOfDataMembers(kFALSE)->MakeIterator()); const TDataMember* p = (const TDataMember*) i->Next(); ) {
259  if (( option && strcmp (p->GetName(), name) == 0) ||
260  (!option && strcasecmp(p->GetName(), name) == 0)) {
261  return this->get(*p);
262  }
263  }
264 
265  // check for base classes
266 
267  for (std::unique_ptr<TIterator> i(this->getClass()->GetListOfBases()->MakeIterator()); TBaseClass* p = (TBaseClass*) i->Next(); ) {
268 
269  if (is_class(*p) && !is_STLcontainer(*p)) {
270 
271  JRootClass rcs = this->get(*p);
272 
273  rcs = rcs.find(name);
274 
275  if (rcs.is_valid()) {
276  return rcs;
277  }
278  }
279  }
280  }
281  }
282 
283  return JRootClass(); // invalid value
284  }
Auxiliary class to manage access to base classes and data members of ROOT class.
Definition: JRootClass.hh:43
bool is_valid() const
Check validity of this class.
Definition: JRootClass.hh:219
JRootClass get(const TDataMember &data_member) const
Get ROOT class of given data member.
Definition: JRootClass.hh:293
static bool is_STLcontainer(const TBaseClass &base_class)
Check if base class is STL container.
Definition: JRootClass.hh:91
JRootClass()
Default constructor.
Definition: JRootClass.hh:333
TClass * getClass() const
Get class.
Definition: JRootClass.hh:194
JRootClass find(const char *const name, const bool option=true) const
Find base class or data member with given name within current class.
Definition: JRootClass.hh:246

◆ get() [1/2]

JRootClass JROOT::JRootClass::get ( const TDataMember &  data_member) const
inline

Get ROOT class of given data member.

Parameters
data_memberdata member
Returns
ROOT class

Definition at line 293 of file JRootClass.hh.

294  {
295  return JRootClass(TDictionary::GetDictionary(data_member.GetTypeName()),
296  this->getOffset() + data_member.GetOffset());
297  }

◆ get() [2/2]

JRootClass JROOT::JRootClass::get ( const TBaseClass &  base_class) const
inline

Get ROOT class of given base class.

Parameters
base_classbase class
Returns
ROOT class

Definition at line 306 of file JRootClass.hh.

307  {
308  return JRootClass(TDictionary::GetDictionary(base_class.GetName()),
309  this->getOffset() + const_cast<TBaseClass&>(base_class).GetDelta());
310  }

◆ print() [1/3]

void JROOT::JRootClass::print ( std::ostream &  out) const
inline

Print ROOT class information.

Parameters
outoutput stream

Definition at line 318 of file JRootClass.hh.

319  {
320  print(out, getTypename());
321  }
void print(std::ostream &out) const
Print ROOT class information.
Definition: JRootClass.hh:318

◆ print() [2/3]

void JROOT::JRootClass::print ( std::ostream &  out,
const std::string &  prefix 
) const
inlineprotected

Print ROOT class information.

Parameters
outoutput stream
prefixprefix

Definition at line 358 of file JRootClass.hh.

359  {
360  if (this->is_valid()) {
361 
362  print(out, prefix, this->getTypename());
363 
364  if (this->getClass() != NULL) {
365 
366  if (this->getClass()->GetListOfBases() != NULL) {
367 
368  for (std::unique_ptr<TIterator> i(this->getClass()->GetListOfBases()->MakeIterator()); const TBaseClass* p = (const TBaseClass*) i->Next(); ) {
369  if (!is_STLcontainer(*p))
370  this->get(*p).print(out, prefix + "::" + p->GetName());
371  else
372  print(out, prefix + "::" + p->GetName(), this->get(*p).getTypename());
373  }
374  }
375 
376  if (this->getClass()->GetListOfDataMembers(kFALSE) != NULL) {
377 
378  for (std::unique_ptr<TIterator> i(this->getClass()->GetListOfDataMembers(kFALSE)->MakeIterator()); const TDataMember* p = (const TDataMember*) i->Next(); ) {
379  if (!is_STLstring(*p) && !is_STLcontainer(*p))
380  this->get(*p).print(out, prefix + (is_static(*p) ? "::" : ".") + p->GetName());
381  else
382  print(out, prefix + (is_static(*p) ? "::" : ".") + p->GetName(), this->get(*p).getTypename());
383  }
384  }
385  }
386  }
387  }
static bool is_static(const TDataMember &data_member)
Check if data member is static.
Definition: JRootClass.hh:128
static bool is_STLstring(const TDataMember &data_member)
Check if data member is STL string.
Definition: JRootClass.hh:115

◆ print() [3/3]

static void JROOT::JRootClass::print ( std::ostream &  out,
const std::string &  name,
const std::string &  type 
)
inlinestaticprotected

Print ROOT class information.

Parameters
outoutput stream
namename
typetype

Definition at line 397 of file JRootClass.hh.

398  {
399  using namespace std;
400 
401  out << name << " " << '(' << type << ')' << endl;
402  }
Definition: JSTDTypes.hh:14

Member Data Documentation

◆ dictionary

TDictionary* JROOT::JRootClass::dictionary
protected

pointer to ROOT dictionary

Definition at line 326 of file JRootClass.hh.

◆ offset

int JROOT::JRootClass::offset
protected

offset with respect to data structure [B]

Definition at line 327 of file JRootClass.hh.


The documentation for this struct was generated from the following file: