TMemberInspector.h

Go to the documentation of this file.
00001 // @(#)root/base:$Id: TMemberInspector.h 35394 2010-09-17 19:40:12Z pcanal $
00002 // Author: Fons Rademakers   15/07/96
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TMemberInspector
00013 #define ROOT_TMemberInspector
00014 
00015 //////////////////////////////////////////////////////////////////////////
00016 //                                                                      //
00017 // TMemberInspector                                                     //
00018 //                                                                      //
00019 // Abstract base class for accessing the datamembers of a class.        //
00020 // Classes derived from this class can be given as argument to the      //
00021 // ShowMembers() methods of ROOT classes. This feature facilitates      //
00022 // the writing of class browsers and inspectors.                        //
00023 //                                                                      //
00024 //////////////////////////////////////////////////////////////////////////
00025 
00026 #include "Rtypes.h"
00027 
00028 class TObject;
00029 class TClass;
00030 
00031 class TMemberInspector {
00032 private:
00033    class TParentBuf;
00034    TParentBuf* fParent; // current inspection "path"
00035 
00036 public:
00037    TMemberInspector();
00038    virtual ~TMemberInspector();
00039 
00040    virtual void Inspect(TClass *cl, const char *parent, const char *name, const void *addr) = 0;
00041 
00042    const char* GetParent() const;
00043    Ssiz_t GetParentLen() const;
00044    void AddToParent(const char* name);
00045    void RemoveFromParent(Ssiz_t startingAt);
00046 
00047    template <class T>
00048    void InspectMember(T& obj, const char* name) {
00049       Ssiz_t len = GetParentLen();
00050       AddToParent(name);
00051       obj.ShowMembers(*this);
00052       RemoveFromParent(len);
00053    }
00054 
00055    void InspectMember(TObject& obj, const char* name);
00056    void InspectMember(const char* topclassname, void* pobj, const char* name,
00057                       Bool_t transient);
00058    void InspectMember(TClass* cl, void* pobj, const char* name);
00059    
00060    void GenericShowMembers(const char *topClassName, void *obj,
00061                            Bool_t transientMember);
00062 
00063    ClassDef(TMemberInspector,0)  //ABC for inspecting class data members
00064 };
00065 
00066 #endif

Generated on Tue Jul 5 14:10:27 2011 for ROOT_528-00b_version by  doxygen 1.5.1