Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TListOfEnums.h
Go to the documentation of this file.
1 // @(#)root/cont
2 // Author: Bianca-Cristina Cristescu February 2014
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_TListOfEnums
13 #define ROOT_TListOfEnums
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TListOfEnums //
18 // //
19 // A collection of TEnum objects designed for fast access given a //
20 // DeclId_t and for keep track of TEnum that were described //
21 // unloaded enum. //
22 // //
23 //////////////////////////////////////////////////////////////////////////
24 
25 #include "THashList.h"
26 
27 #include "TDictionary.h"
28 
29 class TExMap;
30 class TEnum;
31 
32 class TListOfEnums : public THashList
33 {
34 private:
35  friend class TCling;
36  friend class TClass;
37  friend class TProtoClass;
38  friend class TROOT;
39 
40  TClass *fClass; //! Context of this list. Not owned.
41 
42  TExMap *fIds; //! Map from DeclId_t to TEnum*
43  THashList *fUnloaded; //! Holder of TEnum for unloaded Enums.
44  Bool_t fIsLoaded; //! Mark whether Load was executed.
45  ULong64_t fLastLoadMarker; //! Represent interpreter state when we last did a full load.
46 
47  TListOfEnums(const TListOfEnums&) = delete;
48  TListOfEnums& operator=(const TListOfEnums&) = delete;
49 
50  void MapObject(TObject *obj);
51  void UnmapObject(TObject *obj);
52 
53  void Load();
54  void Unload();
55  void Unload(TEnum *e);
56  void SetClass(TClass* cl) { fClass = cl; }
57 
58 public:
59  typedef TDictionary::DeclId_t DeclId_t;
60 
61 protected:
62  TClass *GetClass() const {return fClass;}
63  TExMap *GetIds() { return fIds;}
64  TEnum *FindUnloaded(const char* name) { return (TEnum*)fUnloaded->FindObject(name);}
65  TEnum *Get(DeclId_t id, const char *name);
66 
67 public:
68  TListOfEnums(TClass *cl = 0);
69  ~TListOfEnums() override;
70 
71  TEnum *Find(DeclId_t id) const;
72  virtual TEnum *GetObject(const char*) const;
73 
74  void Clear(Option_t *option) override;
75  void Delete(Option_t *option="") override;
76 
77  Bool_t IsLoaded() const { return fIsLoaded; }
78  void AddFirst(TObject *obj) override;
79  void AddFirst(TObject *obj, Option_t *opt) override;
80  void AddLast(TObject *obj) override;
81  void AddLast(TObject *obj, Option_t *opt) override;
82  void AddAt(TObject *obj, Int_t idx) override;
83  void AddAfter(const TObject *after, TObject *obj) override;
84  void AddAfter(TObjLink *after, TObject *obj) override;
85  void AddBefore(const TObject *before, TObject *obj) override;
86  void AddBefore(TObjLink *before, TObject *obj) override;
87 
88  void RecursiveRemove(TObject *obj) override;
89  TObject *Remove(TObject *obj) override;
90  TObject *Remove(TObjLink *lnk) override;
91 
92  ClassDefOverride(TListOfEnums,2); // List of TDataMembers for a class
93 };
94 
95 #endif // ROOT_TListOfEnums