3 #include "TDataMember.h"
18 info.
fType =
"Unknown";
21 #if ROOT_VERSION_CODE < ROOT_VERSION(5,28,0)
24 obj->ShowMembers(*
this,parent);
26 obj->ShowMembers(*
this);
28 std::map<std::string, MemberInfo>::const_iterator iter =
fBaseTypeMembers.find(member);
37 void** vobj = (
void**)&obj;
40 #if ROOT_VERSION_CODE < ROOT_VERSION(5,28,0)
43 vvobj->ShowMembers(*
this,parent);
45 vvobj->ShowMembers(*
this);
49 std::map<std::string, MemberInfo>::const_iterator iter;
53 std::stringstream msg;
58 msg<<iter->first<<
"("<<iter->second.fType<<
")"<<
" ";
61 msg<<
" cannot be handled by QObjectInspector. Implement the WriteOnStream method of this QObject!";
62 err.SetDescription(__FILE__,__LINE__,msg.str());
69 str<<iter->first<<
" "<<iter->second.fStringValue<<std::endl;
82 #if ROOT_VERSION_CODE < ROOT_VERSION(5,28,0)
85 obj->ShowMembers(*
this,parent);
87 obj->ShowMembers(*
this);
93 std::stringstream msg;
96 std::map<std::string, MemberInfo>::const_iterator iter =
fOtherMembers.begin();
98 msg<<iter->first<<
" ";
101 msg<<
" cannot be handled by QObjectInspector. Implement the ReadFromStream method of this QObject!";
102 err.SetDescription(__FILE__,__LINE__,msg.str());
106 std::map<std::string,std::string> parValueMap;
108 while(getline(in, line)) {
110 std::stringstream stream(line);
111 std::string label,value;
112 stream>>label>>value;
113 while(stream.good()) {
116 value +=
" " + newval;
118 parValueMap[label]=value;
121 std::map<std::string, MemberInfo>::iterator iter =
fBaseTypeMembers.begin();
123 if(parValueMap.find(iter->first) != parValueMap.end()) {
124 if(iter->second.fIsPointer) {
125 int size = atoi(parValueMap.find(iter->second.fLengthMember)->second.c_str());
126 Resize(iter->second,size);
128 std::stringstream str;
129 str<<parValueMap[iter->first];
131 for(
int i = 0; i < size; i++) {
133 char** apos = (
char**) (iter->second.fAddress);
135 pos += (i*iter->second.fMemberSize);
136 Assign(pos,iter->second.fEDataType,value);
139 }
else if(iter->second.fType ==
"string") {
140 (*(std::string*)iter->second.fAddress) = parValueMap[iter->first];
142 Assign(iter->second.fAddress,iter->second.fEDataType,parValueMap[iter->first]);
148 std::stringstream msg;
149 msg<<
"Member \""<<iter->first<<
"\" not found";
150 err.SetDescription(msg.str());
161 TDataMember *member = cl->GetDataMember(mname) ;
164 std::string memberTypeName = member->GetTypeName();
165 std::string memberName = member->GetName();
166 std::string fullName = std::string(parent) + memberName;
167 bool isapointer = member->IsaPointer();
168 bool isbasic = member->IsBasic();
169 bool ispersistent = member->IsPersistent();
171 TDataType* membertype = member->GetDataType();
173 TClass* classa = TClass::GetClass(memberTypeName.c_str(),kTRUE, kTRUE);
174 if(classa && classa->InheritsFrom(
"TObject")) isQObject = 1;
176 info.
fType = memberTypeName;
183 }
else if(isbasic && ispersistent && memberName !=
"fBits" && memberName !=
"fUniqueID") {
185 info.
fEDataType = (EDataType) membertype->GetType();
188 info.
fLengthMember = std::string(parent) + member->GetArrayIndex();
191 int size = vsize.
GetInt();
193 for(
int i =0; i < size; i++) {
195 char** apos = (
char**) (info.
fAddress);
197 pos += (i*membertype->Size());
207 }
else if(ispersistent && memberName !=
"fBits" && memberName !=
"fUniqueID") {
208 if(info.
fType ==
"string") {
223 std::string stringType =
"Unknown";
259 stringType =
"Unknown";
270 (*(
char*)addr) = value[0];
272 (*(
char*)addr) =
'\0';
276 (*(
unsigned char*)addr) = value[0];
278 (*(
unsigned char*)addr) =
'\0';
282 (*(
short*)addr) = atoi(value.c_str());
288 (*(
unsigned short*)addr) = atoi(value.c_str());
294 (*(
int*)addr) = atoi(value.c_str());
300 (*(
unsigned int*)addr) = atoi(value.c_str());
306 (*(
float*)addr) = atof(value.c_str());
312 (*(
double*)addr) = atof(value.c_str());
318 (*(Long64_t*)addr) = atoi(value.c_str());
324 (*(Long64_t*)addr) = atoi(value.c_str());
330 (*(
bool*)addr) = atoi(value.c_str());
345 char** oaddr = (
char**)info.
fAddress;
346 char* addr = (
char*)*oaddr;
347 if(addr)
delete [] addr;
348 *oaddr =
new char[size];
353 unsigned char** oaddr = (
unsigned char**)info.
fAddress;
354 unsigned char* addr = (
unsigned char*)*oaddr;
355 if(addr)
delete [] addr;
356 *oaddr =
new unsigned char[size];
361 short** oaddr = (
short**)info.
fAddress;
362 short* addr = (
short*)*oaddr;
363 if(addr)
delete [] addr;
364 *oaddr =
new short[size];
369 unsigned short** oaddr = (
unsigned short**)info.
fAddress;
370 unsigned short* addr = (
unsigned short*)*oaddr;
371 if(addr)
delete [] addr;
372 *oaddr =
new unsigned short[size];
378 int* addr = (
int*)*oaddr;
379 if(addr)
delete [] addr;
380 *oaddr =
new int[size];
385 unsigned int** oaddr = (
unsigned int**)info.
fAddress;
386 unsigned int* addr = (
unsigned int*)*oaddr;
387 if(addr)
delete [] addr;
388 *oaddr =
new unsigned int[size];
393 float** oaddr = (
float**)info.
fAddress;
394 float* addr = (
float*)*oaddr;
395 if(addr)
delete [] addr;
396 *oaddr =
new float[size];
401 double** oaddr = (
double**)info.
fAddress;
402 double* addr = *oaddr;
403 if(addr)
delete [] addr;
404 *oaddr =
new double[size];
409 Long64_t** oaddr = (Long64_t**)info.
fAddress;
410 Long64_t* addr = *oaddr;
411 if(addr)
delete [] addr;
412 *oaddr =
new Long64_t[size];
417 ULong64_t** oaddr = (ULong64_t**)info.
fAddress;
418 ULong64_t* addr = (ULong64_t*)*oaddr;
419 if(addr)
delete [] addr;
420 *oaddr =
new ULong64_t[size];
426 bool** oaddr = (
bool**)info.
fAddress;
427 bool* addr = (
bool*)*oaddr;
428 if(addr)
delete [] addr;
429 *oaddr =
new bool[size];
#define Q_BEGIN_NAMESPACE
error class with error type and description
std::string fLengthMember
virtual void Inspect(TClass *cl, const char *parent, const char *mname, const void *addr)
void Resize(MemberInfo &info, int size)
std::map< std::string, MemberInfo > fBaseTypeMembers
MemberInfo FindBaseType(QObject *obj, const char *member)
std::string TypeToBranchType(EDataType mtypes)
std::map< std::string, MemberInfo > fOtherMembers
QError DumpOnStream(const QObject *obj, std::ostream &str)
QError FillFromStream(QObject *obj, std::istream &in)
void Assign(void *addr, EDataType dataType, const std::string &value)
base class for objects handled by QEvent and QGlobalDataManager.
virtual void Clear()=0
reset members to default values