27 class TMemberInspector::TParentBuf {
29 std::vector<char> fBuf;
32 TParentBuf(): fBuf(1024), fLen(0) {}
33 Ssiz_t GetLength()
const {
return fLen; }
34 void Append(
const char*);
35 void Remove(Ssiz_t startingAt);
36 operator const char*()
const {
return &fBuf[0]; }
39 void TMemberInspector::TParentBuf::Append(
const char* add)
42 if (!add || !add[0])
return;
43 Ssiz_t addlen = strlen(add);
44 fBuf.resize(fLen + addlen + 1);
53 void TMemberInspector::TParentBuf::Remove(Ssiz_t startingAt)
60 ClassImp(TMemberInspector);
62 TMemberInspector::TMemberInspector():
63 fObjectPointerState(kUnset)
67 fParent =
new TParentBuf();
70 TMemberInspector::~TMemberInspector() {
75 const char* TMemberInspector::GetParent()
const
81 Ssiz_t TMemberInspector::GetParentLen()
const
84 return fParent->GetLength();
87 void TMemberInspector::AddToParent(
const char* name)
90 fParent->Append(name);
93 void TMemberInspector::RemoveFromParent(Ssiz_t startingAt)
96 fParent->Remove(startingAt);
99 void TMemberInspector::Inspect(TClass *,
const char *,
const char *,
const void *)
102 Fatal(
"Inspect",
"This version of Inspect is obsolete");
105 void TMemberInspector::GenericShowMembers(
const char *topClassName,
const void *obj,
106 Bool_t isTransient) {
116 if (!TClassEdit::IsSTLCont(topClassName)) {
117 ClassInfo_t *b = gInterpreter->ClassInfo_Factory(topClassName);
118 Bool_t isloaded = gInterpreter->ClassInfo_IsLoaded(b);
119 gInterpreter->ClassInfo_Delete(b);
120 if (!isloaded)
return;
124 TClass *top = TClass::GetClass(topClassName);
126 top->CallShowMembers(obj, *
this, isTransient);
132 void TMemberInspector::InspectMember(
const TObject& obj,
const char* name, Bool_t isTransient)
136 InspectMember<TObject>(obj, name, isTransient);
139 void TMemberInspector::InspectMember(
const char* topclassname,
const void* pobj,
140 const char* name, Bool_t isTransient)
144 Ssiz_t len = fParent->GetLength();
145 fParent->Append(name);
146 GenericShowMembers(topclassname, pobj, isTransient);
147 fParent->Remove(len);
150 void TMemberInspector::InspectMember(TClass* cl,
const void* pobj,
const char* name, Bool_t isTransient)
154 Ssiz_t len = fParent->GetLength();
155 fParent->Append(name);
156 cl->CallShowMembers(pobj, *
this, isTransient);
157 fParent->Remove(len);