1 // @(#)root/base:$Id$ 2 // Author: Fons Rademakers 15/07/96 3 4 /************************************************************************* 5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 6 * All rights reserved. * 7 * * 8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see $ROOTSYS/README/CREDITS. * 10 *************************************************************************/ 11 12 #ifndef ROOT_TMemberInspector 13 #define ROOT_TMemberInspector 14 15 ////////////////////////////////////////////////////////////////////////// 16 // // 17 // TMemberInspector // 18 // // 19 // Abstract base class for accessing the datamembers of a class. // 20 // Classes derived from this class can be given as argument to the // 21 // ShowMembers() methods of ROOT classes. This feature facilitates // 22 // the writing of class browsers and inspectors. // 23 // // 24 ////////////////////////////////////////////////////////////////////////// 25 26 #include "Rtypes.h" 27 28 class TObject; 29 class TClass; 30 31 class TMemberInspector { 32 private: 33 class TParentBuf; 34 TParentBuf* fParent; // current inspection "path" 35 36 TMemberInspector(const TMemberInspector&); // Not implemented. 37 TMemberInspector &operator=(const TMemberInspector&); // Not implemented. 38 39 public: 40 TMemberInspector(); 41 virtual ~TMemberInspector(); 42 43 virtual void Inspect(TClass *cl, const char *parent, const char *name, const void *addr) = 0; 44 45 const char* GetParent() const; 46 Ssiz_t GetParentLen() const; 47 void AddToParent(const char* name); 48 void RemoveFromParent(Ssiz_t startingAt); 49 50 template <class T> 51 void InspectMember(T& obj, const char* name) { 52 Ssiz_t len = GetParentLen(); 53 AddToParent(name); 54 obj.ShowMembers(*this); 55 RemoveFromParent(len); 56 } 57 58 void InspectMember(TObject& obj, const char* name); 59 void InspectMember(const char* topclassname, void* pobj, const char* name, 60 Bool_t transient); 61 void InspectMember(TClass* cl, void* pobj, const char* name); 62 63 void GenericShowMembers(const char *topClassName, void *obj, 64 Bool_t transientMember); 65 66 ClassDef(TMemberInspector,0) //ABC for inspecting class data members 67 }; 68 69 #endif 70