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