Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TDataMember.h
Go to the documentation of this file.
1 // @(#)root/meta:$Id$
2 // Author: Fons Rademakers 04/02/95
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_TDataMember
13 #define ROOT_TDataMember
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TDataMember //
19 // //
20 // Dictionary interface for a class data member. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #include "TDictionary.h"
25 
26 class TList;
27 class TClass;
28 class TDataType;
29 class TMethodCall;
30 
31 class TDataMember : public TDictionary {
32 
33 private:
34  enum EStatusBits {
35  kObjIsPersistent = BIT(2)
36  };
37 
38  DataMemberInfo_t *fInfo; //!pointer to CINT data member info
39  TClass *fClass; //!pointer to the class
40  TDataType *fDataType; //!pointer to data basic type descriptor
41 
42  Long_t fOffset; //offset
43  Int_t fSTLCont; //STL type
44  Long_t fProperty; //Property
45  Int_t fArrayDim; //Number of array dimensions
46  Int_t *fArrayMaxIndex;//[fArrayDim] Maximum index for each dimension
47  TString fArrayIndex; //String representation of the index variable name
48 
49  TString fTypeName; //data member type, e,g.: "class TDirectory*" -> "TDirectory".
50  TString fFullTypeName; //full type description of data member, e,g.: "class TDirectory*".
51  TString fTrueTypeName; //full type description with no typedef
52 
53  // The following fields allows to access all (even private) datamembers and
54  // provide a possibility of having options with names and strings.
55  // These options are defined in a comment to a field!
56  TMethodCall *fValueGetter; //!method that returns a value;
57  TMethodCall *fValueSetter; //!method which sets value;
58  TList *fOptions; //list of possible values 0=no restrictions
59 
60  void Init(bool afterReading);
61 
62 protected:
63  TDataMember(const TDataMember&);
64  TDataMember& operator=(const TDataMember&);
65 
66 public:
67 
68  TDataMember(DataMemberInfo_t *info = 0, TClass *cl = 0);
69  virtual ~TDataMember();
70  Int_t GetArrayDim() const;
71  DeclId_t GetDeclId() const;
72  Int_t GetMaxIndex(Int_t dim) const;
73  TClass *GetClass() const { return fClass; }
74  TDataType *GetDataType() const { return fDataType; } //only for basic type
75  Long_t GetOffset() const;
76  Long_t GetOffsetCint() const;
77  const char *GetTypeName() const;
78  const char *GetFullTypeName() const;
79  const char *GetTrueTypeName() const;
80  const char *GetArrayIndex() const;
81  Int_t GetUnitSize() const;
82  TList *GetOptions() const;
83  TMethodCall *SetterMethod(TClass *cl);
84  TMethodCall *GetterMethod(TClass *cl = 0);
85 
86  Bool_t IsBasic() const;
87  Bool_t IsEnum() const;
88  Bool_t IsaPointer() const;
89  Bool_t IsPersistent() const { return TestBit(kObjIsPersistent); }
90  Int_t IsSTLContainer();
91  Bool_t IsValid();
92  Long_t Property() const;
93  void SetClass(TClass* cl) { fClass = cl; }
94  virtual bool Update(DataMemberInfo_t *info);
95 
96  ClassDef(TDataMember,2) //Dictionary for a class data member
97 };
98 
99 
100 // This class implements one option in options list. All Data members are public
101 // for convenience reasons.
102 
103 class TOptionListItem : public TObject {
104 
105 public:
106  TDataMember *fDataMember; //!Data member to which this option belongs
107  Long_t fValue; //Numerical value assigned to option
108  Long_t fValueMaskBit; //Not used yet: bitmask used when option is a toggle group
109  Long_t fToggleMaskBit; //Not used yet: bitmask used when toggling value
110  TString fOptName; //Text assigned to option which appears in option menu
111  TString fOptLabel; //Text (or enum) value assigned to option.
112  TOptionListItem():
113  fDataMember(0), fValue(0), fValueMaskBit(0), fToggleMaskBit(0)
114  {}
115  TOptionListItem(TDataMember *m,Long_t val, Long_t valmask, Long_t tglmask,
116  const char *name, const char *label);
117 
118  ClassDef(TOptionListItem,2); //Element in the list of options.
119 };
120 
121 #endif