Skip to content
Snippets Groups Projects
Commit cb1f4c20 authored by Paul Russo's avatar Paul Russo
Browse files

Cleanup handling of cache variables during initialization,

copying, and iteration.

-- Paul Russo


git-svn-id: http://root.cern.ch/svn/root/trunk@24528 27541ba8-7e3a-0410-8455-c3a389f83636
parent b6d33f47
No related merge requests found
......@@ -13,7 +13,6 @@
*
************************************************************************/
#ifndef G__DATAMEMBER_H
#define G__DATAMEMBER_H
......@@ -21,106 +20,60 @@
namespace Cint {
/*********************************************************************
* class G__DataMemberInfo
*
*
*********************************************************************/
class
#ifndef __CINT__
G__EXPORT
#endif
G__DataMemberInfo {
// -- Types.
public:
enum error_code { VALID, NOT_INT, NOT_DEF, IS_PRIVATE, UNKNOWN };
// -- Data Members.
private:
Reflex::Scope m_scope;
Reflex::Member m_datambr;
int m_memberiter;
// -- Backward compatibility
G__TypeInfo *m_typeinfo;
G__ClassInfo *m_memberof;
std::string m_name;
// -- Member Functions.
public:
~G__DataMemberInfo();
G__DataMemberInfo { // class to iterate over data members in a scope and return info about each one
G__DataMemberInfo()
: m_memberiter(-1), m_typeinfo(0), m_memberof(0)
{
Init();
}
G__DataMemberInfo(const G__DataMemberInfo& dmi)
: m_scope(dmi.m_scope)
, m_datambr(dmi.m_datambr)
, m_memberiter(dmi.m_memberiter)
, m_typeinfo(0)
, m_memberof(0)
{
}
G__DataMemberInfo(class G__ClassInfo& a) : m_typeinfo(0), m_memberof(0)
{
Init(a);
}
G__DataMemberInfo(const ::Reflex::Member& m)
: m_datambr(m), m_typeinfo(0), m_memberof(0)
{
}
G__DataMemberInfo& operator=(const G__DataMemberInfo& dmi)
{
m_datambr = dmi.m_datambr;
return *this;
}
public: // -- Types.
enum error_code { VALID, NOT_INT, NOT_DEF, IS_PRIVATE, UNKNOWN };
void Init();
void Init(class G__ClassInfo& a);
void Init(const ::Reflex::Scope& a);
public: // -- Member Functions.
~G__DataMemberInfo(); // destructor
G__DataMemberInfo(); // default constructor
G__DataMemberInfo(class G__ClassInfo&); // init with a specific scope
G__DataMemberInfo(const ::Reflex::Member); // init with a specific member TODO: Can we use iterator after?
G__DataMemberInfo(const G__DataMemberInfo&); // copy constructor
G__DataMemberInfo& operator=(const G__DataMemberInfo&); // copy assignment operator
void Init(); // default init
void Init(class G__ClassInfo&); // init with a specific scope
void Init(const ::Reflex::Scope); // init with a specific scope
void Init(long handlinin, long indexin, G__ClassInfo* belongingclassin);
size_t Handle()
{
return (size_t) m_datambr.Id();
}
int Index()
{
return 0;
}
const char* Name();
const char* Title();
Reflex::Type ReflexType();
G__TypeInfo* Type();
long Property();
long Offset();
int Bitfield();
int ArrayDim();
int MaxIndex(int dim);
Reflex::Scope DeclaringScope();
G__ClassInfo* MemberOf();
void SetGlobalcomp(int globalcomp);
int IsValid();
int SetFilePos(const char* fname);
int Next();
int Prev();
const char* ValidArrayIndex(int* errnum = 0, char** errstr = 0);
const char* FileName();
int LineNumber();
size_t Handle(); // id number of current data member
int Index(); // always returns zero
const char* Name(); // name of current data member
const char* Title(); // comment of current data member
::Reflex::Type ReflexType(); // reflex type of current data member
G__TypeInfo* Type(); // reflex type of current data member as a G__TypeInfo
long Property(); // summary of properties of current data member
long Offset(); // addressOffset of current data member
int Bitfield(); // bitfield width of current data member
int ArrayDim(); // number of array bounds of current data member
int MaxIndex(int dim); // array bound for a given dimension of current data member
::Reflex::Scope DeclaringScope(); // scope of current data member
G__ClassInfo* MemberOf(); // scope of current data member as a G__ClassInfo
void SetGlobalcomp(int globalcomp); // change globalcomp of current data member
int IsValid(); // Internal iterator is pointing at a valid data member.
int SetFilePos(const char* fname); // Set internal iterator based on a saved filed position
int Next(); // Move to next data member in scope.
int Prev(); // Move to previous data member in scope.
const char* ValidArrayIndex(int* errnum = 0, char** errstr = 0); // check the current data member comment for an array index expression
const char* FileName(); // filename of data member pointed to by internal iterator
int LineNumber(); // line number of data member pointed to by internal iterator
private: // -- Data Members.
Reflex::Scope m_scope; // declaring scope we represent
Reflex::Member m_datambr; // current state of internal iterator, the current data member
int m_memberiter; // current state of internal iterator, member index
// -- Backward compatibility
G__TypeInfo* m_typeinfo; // we own, cached object, reflex type of current data member as a G__TypeInfo
G__ClassInfo* m_memberof; // we own, cached object, the declaring scope as a G__ClassInfo
};
} // namespace Cint
using namespace Cint;
#endif
#endif // G__DATAMEMBER_H
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment