Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TListOfFunctions.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_TListOfFunctions
13 #define ROOT_TListOfFunctions
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TListOfFunctions //
18 // //
19 // A collection of TFunction objects designed for fast access given a //
20 // DeclId_t and for keep track of TFunction that were described //
21 // unloaded function. //
22 // //
23 //////////////////////////////////////////////////////////////////////////
24 
25 #include "THashList.h"
26 
27 #include "THashTable.h"
28 
29 #include "TDictionary.h"
30 
31 class TExMap;
32 class TFunction;
33 
34 class TListOfFunctions : public THashList
35 {
36 private:
37  friend class TClass;
38  TClass *fClass; // Context of this list. Not owned.
39 
40  TExMap *fIds; // Map from DeclId_t to TFunction*
41  THashList *fUnloaded; // Holder of TFunction for unloaded functions.
42  THashTable fOverloads; // TLists of overloads.
43  ULong64_t fLastLoadMarker; // Represent interpreter state when we last did a full load.
44 
45  TListOfFunctions(const TListOfFunctions&); // not implemented
46  TListOfFunctions& operator=(const TListOfFunctions&); // not implemented
47  TList *GetListForObjectNonConst(const char* name);
48 
49  void MapObject(TObject *obj);
50  void UnmapObject(TObject *obj);
51 
52 public:
53  typedef TDictionary::DeclId_t DeclId_t;
54 
55  TListOfFunctions(TClass *cl);
56  ~TListOfFunctions();
57 
58  virtual void Clear(Option_t *option);
59  virtual void Delete(Option_t *option="");
60 
61  virtual TObject *FindObject(const TObject* obj) const;
62  virtual TObject *FindObject(const char *name) const;
63  virtual TList *GetListForObject(const char* name) const;
64  virtual TList *GetListForObject(const TObject* obj) const;
65  virtual TIterator *MakeIterator(Bool_t dir = kIterForward) const;
66 
67  virtual TObject *At(Int_t idx) const;
68  virtual TObject *After(const TObject *obj) const;
69  virtual TObject *Before(const TObject *obj) const;
70  virtual TObject *First() const;
71  virtual TObjLink *FirstLink() const;
72  virtual TObject **GetObjectRef(const TObject *obj) const;
73  virtual TObject *Last() const;
74  virtual TObjLink *LastLink() const;
75 
76  virtual Int_t GetLast() const;
77  virtual Int_t IndexOf(const TObject *obj) const;
78 
79  virtual Int_t GetSize() const;
80 
81 
82  TFunction *Find(DeclId_t id) const;
83  TFunction *Get(DeclId_t id);
84 
85  void AddFirst(TObject *obj);
86  void AddFirst(TObject *obj, Option_t *opt);
87  void AddLast(TObject *obj);
88  void AddLast(TObject *obj, Option_t *opt);
89  void AddAt(TObject *obj, Int_t idx);
90  void AddAfter(const TObject *after, TObject *obj);
91  void AddAfter(TObjLink *after, TObject *obj);
92  void AddBefore(const TObject *before, TObject *obj);
93  void AddBefore(TObjLink *before, TObject *obj);
94 
95  void RecursiveRemove(TObject *obj);
96  TObject *Remove(TObject *obj);
97  TObject *Remove(TObjLink *lnk);
98 
99  void Load();
100  void Unload();
101  void Unload(TFunction *func);
102 
103  ClassDef(TListOfFunctions,0); // List of TFunctions for a class
104 };
105 
106 //////////////////////////////////////////////////////////////////////////
107 // //
108 // TListOfFunctionsIter //
109 // //
110 // Iterator of TListOfFunctions. //
111 // //
112 //////////////////////////////////////////////////////////////////////////
113 class TListOfFunctionsIter : public TListIter
114 {
115 public:
116  TListOfFunctionsIter(const TListOfFunctions *l, Bool_t dir = kIterForward);
117 
118  using TListIter::operator=;
119 
120  TObject *Next();
121 
122  ClassDef(TListOfFunctionsIter,0)
123 };
124 
125 
126 #endif // ROOT_TListOfFunctions