34 static void AddBasesClasses(TList &bases, TClass *cl)
36 TIter nextBaseClass(cl->GetListOfBases());
38 while ((base = (TBaseClass*) nextBaseClass())) {
39 if (!base->GetClassPointer())
continue;
40 if (!(base->Property() & kIsPublic))
continue;
42 bases.Add(base->GetClassPointer());
43 AddBasesClasses(bases,base->GetClassPointer());
50 TViewPubDataMembers::TViewPubDataMembers(TClass *cl )
54 AddBasesClasses(fClasses,cl);
61 TViewPubDataMembers::~TViewPubDataMembers()
69 void TViewPubDataMembers::Clear(Option_t * )
71 ::Error(
"TViewPubDataMembers::Clear",
"Operation not allowed on a view.");
78 void TViewPubDataMembers::Delete(Option_t * )
80 ::Error(
"TViewPubDataMembers::Delete",
"Operation not allowed on a view.");
88 TObject *TViewPubDataMembers::FindObject(
const char * name)
const
90 TIter next(&fClasses);
91 while (TClass *cl = (TClass*)next()) {
92 THashList *hl =
dynamic_cast<THashList*
>(cl->GetListOfDataMembers(kFALSE));
93 TIter content_next(hl->GetListForObject(name));
94 while (TDictionary *p = (TDictionary*) content_next()) {
97 if (strcmp(name,p->GetName())==0 && (p->Property() & kIsPublic))
109 TObject *TViewPubDataMembers::FindObject(
const TObject * obj)
const
111 TIter next(&fClasses);
112 while (TClass *cl = (TClass*)next()) {
113 TObject *result = cl->GetListOfDataMembers(kFALSE)->FindObject(obj);
114 if (result)
return result;
122 TIterator *TViewPubDataMembers::MakeIterator(Bool_t dir )
const
124 return new TViewPubDataMembersIter(
this, dir);
131 void TViewPubDataMembers::AddFirst(TObject * )
133 ::Error(
"TViewPubDataMembers::AddFirst",
"Operation not allowed on a view.");
140 void TViewPubDataMembers::AddFirst(TObject * , Option_t * )
142 ::Error(
"TViewPubDataMembers::AddFirst",
"Operation not allowed on a view.");
149 void TViewPubDataMembers::AddLast(TObject * )
151 ::Error(
"TViewPubDataMembers::AddLast",
"Operation not allowed on a view.");
158 void TViewPubDataMembers::AddLast(TObject * , Option_t * )
160 ::Error(
"TViewPubDataMembers::AddLast",
"Operation not allowed on a view.");
167 void TViewPubDataMembers::AddAt(TObject * , Int_t )
169 ::Error(
"TViewPubDataMembers::AddAt",
"Operation not allowed on a view.");
176 void TViewPubDataMembers::AddAfter(
const TObject * , TObject * )
178 ::Error(
"TViewPubDataMembers::RemAddLastove",
"Operation not allowed on a view.");
185 void TViewPubDataMembers::AddAfter(TObjLink * , TObject * )
187 ::Error(
"TViewPubDataMembers::AddAfter",
"Operation not allowed on a view.");
194 void TViewPubDataMembers::AddBefore(
const TObject * , TObject * )
196 ::Error(
"TViewPubDataMembers::AddBefore",
"Operation not allowed on a view.");
203 void TViewPubDataMembers::AddBefore(TObjLink * , TObject * )
205 ::Error(
"TViewPubDataMembers::AddBefore",
"Operation not allowed on a view.");
211 TObject *TViewPubDataMembers::At(Int_t idx)
const
214 TIter next(&fClasses);
215 while (TClass *cl = (TClass*)next()) {
216 TIter content_next(cl->GetListOfDataMembers(kFALSE));
217 while (TDictionary *p = (TDictionary*) content_next()) {
218 if (p->Property() & kIsPublic) {
219 if (i == idx)
return p;
231 TObject *TViewPubDataMembers::After(
const TObject * )
const
233 ::Error(
"TViewPubDataMembers::After",
"Operation not allowed on a view.");
241 TObject *TViewPubDataMembers::Before(
const TObject * )
const
243 ::Error(
"TViewPubDataMembers::Before",
"Operation not allowed on a view.");
251 TObject *TViewPubDataMembers::First()
const
253 ::Error(
"TViewPubDataMembers::First",
"Operation not allowed on a view.");
261 TObjLink *TViewPubDataMembers::FirstLink()
const
263 ::Error(
"TViewPubDataMembers::FirstLink",
"Operation not allowed on a view.");
271 TObject **TViewPubDataMembers::GetObjectRef(
const TObject * )
const
273 ::Error(
"TViewPubDataMembers::GetObjectRef",
"Operation not yet allowed on a view.");
281 Int_t TViewPubDataMembers::GetSize()
const
284 TIter next(&fClasses);
285 while (TClass *cl = (TClass*)next()) {
286 TIter content_next(cl->GetListOfDataMembers(kFALSE));
287 while (TDictionary *p = (TDictionary*) content_next())
288 if (p->Property() & kIsPublic) ++size;
298 void TViewPubDataMembers::Load()
300 TIter next(&fClasses);
301 while (TClass *cl = (TClass*)next()) {
302 cl->GetListOfDataMembers(kTRUE);
310 TObject *TViewPubDataMembers::Last()
const
312 ::Error(
"TViewPubDataMembers::Last",
"Operation not allowed on a view.");
320 TObjLink *TViewPubDataMembers::LastLink()
const
322 ::Error(
"TViewPubDataMembers::LastLink",
"Operation not allowed on a view.");
330 void TViewPubDataMembers::RecursiveRemove(TObject * )
332 ::Error(
"TViewPubDataMembers::RecursiveRemove",
"Operation not allowed on a view.");
339 TObject *TViewPubDataMembers::Remove(TObject * )
341 ::Error(
"TViewPubDataMembers::Remove",
"Operation not allowed on a view.");
349 TObject *TViewPubDataMembers::Remove(TObjLink * )
351 ::Error(
"TViewPubDataMembers::Remove",
"Operation not allowed on a view.");
365 TViewPubDataMembersIter::TViewPubDataMembersIter(
const TViewPubDataMembers *l, Bool_t dir)
366 : fView(l),fClassIter(l->GetListOfClasses(),dir), fIter((TCollection *)0),
367 fStarted(kFALSE), fDirection(dir)
374 TViewPubDataMembersIter::TViewPubDataMembersIter(
const TViewPubDataMembersIter &iter) :
375 TIterator(iter), fView(iter.fView),
376 fClassIter(iter.fClassIter), fIter(iter.fIter),
377 fStarted(iter.fStarted), fDirection(iter.fDirection)
384 TIterator &TViewPubDataMembersIter::operator=(
const TIterator &rhs)
386 const TViewPubDataMembersIter *iter =
dynamic_cast<const TViewPubDataMembersIter*
>(&rhs);
387 if (
this != &rhs && iter) {
389 fClassIter = iter->fClassIter;
391 fStarted = iter->fStarted;
392 fDirection = iter->fDirection;
400 TViewPubDataMembersIter &TViewPubDataMembersIter::operator=(
const TViewPubDataMembersIter &rhs)
404 fClassIter = rhs.fClassIter;
406 fStarted = rhs.fStarted;
407 fDirection = rhs.fDirection;
415 TObject *TViewPubDataMembersIter::Next()
417 if (!fView)
return 0;
420 TClass *current = (TClass*)fClassIter();
424 new (&(fIter)) TIter(current->GetListOfDataMembers(kFALSE),fDirection);
432 TDictionary *obj = (TDictionary *)fIter();
435 TClass *current = (TClass*)fClassIter();
438 new (&(fIter)) TIter(current->GetListOfDataMembers(kFALSE),fDirection);
443 }
else if (obj->Property() & kIsPublic) {
456 void TViewPubDataMembersIter::Reset()
465 Bool_t TViewPubDataMembersIter::operator!=(
const TIterator &aIter)
const
467 const TViewPubDataMembersIter *iter =
dynamic_cast<const TViewPubDataMembersIter*
>(&aIter);
469 return (fClassIter != iter->fClassIter || fIter != iter->fIter);
477 Bool_t TViewPubDataMembersIter::operator!=(
const TViewPubDataMembersIter &aIter)
const
479 return (fClassIter != aIter.fClassIter || fIter != aIter.fIter);