Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TListOfDataMembers.h
Go to the documentation of this file.
1 // @(#)root/cont
2 // Author: Philippe Canal Aug 2013
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2013, 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_TListOfDataMembers
13 #define ROOT_TListOfDataMembers
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TListOfDataMembers //
18 // //
19 // A collection of TDataMember objects designed for fast access given a //
20 // DeclId_t and for keep track of TDataMember that were described //
21 // unloaded member. //
22 // //
23 //////////////////////////////////////////////////////////////////////////
24 
25 #include "THashList.h"
26 
27 #include "TDictionary.h"
28 
29 class TExMap;
30 class TDataMember;
31 
32 class TListOfDataMembers : public THashList
33 {
34 private:
35  TClass *fClass; //! Context of this list. Not owned.
36 
37  TExMap *fIds; //! Map from DeclId_t to TDataMember*
38  THashList *fUnloaded; //! Holder of TDataMember for unloaded DataMembers.
39  Bool_t fIsLoaded; //! Mark whether Load was executed.
40  ULong64_t fLastLoadMarker; //! Represent interpreter state when we last did a full load.
41 
42  TListOfDataMembers(const TListOfDataMembers&); // not implemented
43  TListOfDataMembers& operator=(const TListOfDataMembers&); // not implemented
44 
45  void MapObject(TObject *obj);
46  void UnmapObject(TObject *obj);
47 
48 public:
49  typedef TDictionary::DeclId_t DeclId_t;
50 
51  TListOfDataMembers(TClass *cl = 0);
52  // construct from a generic collection of data members objects
53  template<class DataMemberList>
54  TListOfDataMembers(DataMemberList & dmlist) :
55  fClass(0),fIds(0),fUnloaded(0),
56  fIsLoaded(kTRUE), fLastLoadMarker(0)
57  {
58  for (auto * dataMember : dmlist)
59  Add(dataMember);
60  }
61 
62  ~TListOfDataMembers();
63 
64  virtual void Clear(Option_t *option);
65  virtual void Delete(Option_t *option="");
66 
67  using THashList::FindObject;
68  virtual TObject *FindObject(const char *name) const;
69 
70  TDictionary *Find(DeclId_t id) const;
71  TDictionary *Get(DeclId_t id);
72  TDictionary *Get(DataMemberInfo_t *info, bool skipChecks=kFALSE);
73 
74  Bool_t IsLoaded() const { return fIsLoaded; }
75  void AddFirst(TObject *obj);
76  void AddFirst(TObject *obj, Option_t *opt);
77  void AddLast(TObject *obj);
78  void AddLast(TObject *obj, Option_t *opt);
79  void AddAt(TObject *obj, Int_t idx);
80  void AddAfter(const TObject *after, TObject *obj);
81  void AddAfter(TObjLink *after, TObject *obj);
82  void AddBefore(const TObject *before, TObject *obj);
83  void AddBefore(TObjLink *before, TObject *obj);
84 
85  TClass *GetClass() const { return fClass; }
86  void SetClass(TClass* cl) { fClass = cl; }
87  void Update(TDictionary *member);
88 
89  void RecursiveRemove(TObject *obj);
90  TObject *Remove(TObject *obj);
91  TObject *Remove(TObjLink *lnk);
92 
93  void Load();
94  void Unload();
95  void Unload(TDictionary *member);
96 
97  ClassDef(TListOfDataMembers,2); // List of TDataMembers for a class
98 };
99 
100 #endif // ROOT_TListOfDataMembers