76 const Int_t kvalue = 30;
77 const Int_t kline = 1024;
82 TDataType* membertype;
83 TString memberTypeName;
85 const char* memberFullTypeName;
90 if (TDataMember* member = cl->GetDataMember(mname)) {
91 memberTypeName = member->GetTypeName();
92 memberName = member->GetName();
93 memberFullTypeName = member->GetFullTypeName();
94 memberTitle = member->GetTitle();
95 isapointer = member->IsaPointer();
96 isbasic = member->IsBasic();
97 membertype = member->GetDataType();
98 }
else if (!cl->IsLoaded()) {
101 TVirtualStreamerInfo* info = cl->GetStreamerInfo();
103 const char* cursor = mname;
104 while ((*cursor) ==
'*') ++cursor;
105 TString elname(cursor);
106 Ssiz_t pos = elname.Index(
"[");
110 TStreamerElement* element =
dynamic_cast<TStreamerElement*
>(info->GetElements()->FindObject(elname.Data()));
111 if (!element)
return;
112 memberFullTypeName = element->GetTypeName();
114 memberTypeName = memberFullTypeName;
115 memberTypeName = memberTypeName.Strip(TString::kTrailing,
'*');
116 if (memberTypeName.Index(
"const ") == 0) memberTypeName.Remove(0, 6);
118 memberName = element->GetName();
119 memberTitle = element->GetTitle();
120 isapointer = element->IsaPointer() || element->GetType() == TVirtualStreamerInfo::kCharStar;
121 membertype = gROOT->GetType(memberFullTypeName);
123 isbasic = membertype != 0;
129 Bool_t isdate = kFALSE;
130 if (strcmp(memberName,
"fDatime") == 0 && strcmp(memberTypeName,
"UInt_t") == 0) {
133 Bool_t isbits = kFALSE;
134 if (strcmp(memberName,
"fBits") == 0 && strcmp(memberTypeName,
"UInt_t") == 0) {
137 const TClass* dataClass = TClass::GetClass(memberFullTypeName);
138 Bool_t isTString = (dataClass == TString::Class());
139 static TClassRef stdClass(
"std::string");
140 Bool_t isStdString = (dataClass == stdClass);
143 for (i = 0; i < kline; i++) line[i] =
' ';
147 char* pointer =
static_cast<char*
>(
const_cast<void*
>(add));
148 char** ppointer =
reinterpret_cast<char**
>(pointer);
151 char** p3pointer = (
char**)(*ppointer);
153 snprintf(&line[kvalue], kline - kvalue,
"->0");
155 snprintf(&line[kvalue], kline - kvalue,
"->%lx ", (Long_t)p3pointer);
156 else if (membertype) {
157 if (!strcmp(membertype->GetTypeName(),
"char")) {
158 i = strlen(*ppointer);
159 if (kvalue + i > kline) i = kline - 1 - kvalue;
160 Bool_t isPrintable = kTRUE;
161 for (Int_t j = 0; j < i; j++) {
162 if (!std::isprint((*ppointer)[j])) {
163 isPrintable = kFALSE;
169 std::string out(*ppointer);
170 out.copy(line + kvalue, i);
171 line[kvalue + i] = 0;
176 strncpy(&line[kvalue], membertype->AsString(p3pointer), TMath::Min(kline - 1 - kvalue,
177 (
int)strlen(membertype->AsString(p3pointer))));
179 }
else if (!strcmp(memberFullTypeName,
"char*") ||
180 !strcmp(memberFullTypeName,
"const char*")) {
181 i = strlen(*ppointer);
182 if (kvalue + i >= kline) i = kline - 1 - kvalue;
183 Bool_t isPrintable = kTRUE;
184 for (Int_t j = 0; j < i; j++) {
185 if (!std::isprint((*ppointer)[j])) {
186 isPrintable = kFALSE;
191 std::string out(*ppointer);
192 out.copy(line + kvalue, i);
195 line[kvalue + i] = 0;
200 snprintf(&line[kvalue], kline - kvalue,
"->%lx ", (Long_t)p3pointer);
202 }
else if (membertype) {
204 UInt_t* cdatime =
reinterpret_cast<UInt_t*
>(pointer);
205 TDatime::GetDateTime(cdatime[0], cdate, ctime);
206 snprintf(&line[kvalue], kline - kvalue,
"%d/%d", cdate, ctime);
208 snprintf(&line[kvalue], kline - kvalue,
"0x%08x", *
reinterpret_cast<UInt_t*
>(pointer));
210 strncpy(&line[kvalue], membertype->AsString(pointer), TMath::Min(kline - 1 - kvalue, (
int)strlen(membertype->AsString(pointer))));
214 const std::string* str =
reinterpret_cast<const std::string*
>(pointer);
215 snprintf(&line[kvalue], kline - kvalue,
"%s", str->c_str());
216 }
else if (isTString) {
217 TString* str =
reinterpret_cast<TString*
>(pointer);
218 snprintf(&line[kvalue], kline - kvalue,
"%s", str->Data());
220 snprintf(&line[kvalue], kline - kvalue,
"->%lx ", (Long_t)pointer);
227 if (TString(pname) !=
"")
228 indent =
" ";
234 m_info +=
"<td align=right>" + memberValue +
"</td>";