Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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
29class TExMap;
30class TDataMember;
31
33{
34private:
35 TClass *fClass = nullptr; //! Context of this list. Not owned.
36
37 TExMap *fIds = nullptr; //! Map from DeclId_t to TDataMember*
38 THashList *fUnloaded = nullptr; //! Holder of TDataMember for unloaded DataMembers.
39 ULong64_t fLastLoadMarker = 0; //! Represent interpreter state when we last did a full load.
40 std::atomic<bool> fIsLoaded{kFALSE}; //! Mark whether Load was executed.
41
42 TDictionary::EMemberSelection fSelection = TDictionary::EMemberSelection::kNoUsingDecls; //! Whether the list should contain regular data members or only using decls or both.
43
46
47 void MapObject(TObject *obj);
48 void UnmapObject(TObject *obj);
49
50public:
52
53 /// Constructor, possibly for all members of a class (or globals).
54 /// Include (or not) the scope's using declarations of variables.
56 fClass(cl), fSelection(selection) {}
57
58 /// Construct from a generic collection of data members objects
59 template<class DataMemberList>
60 TListOfDataMembers(DataMemberList & dmlist) :
62 {
63 for (auto * dataMember : dmlist)
64 Add(dataMember);
65 }
66
68
69 void Clear(Option_t *option = "") override;
70 void Delete(Option_t *option="") override;
71
73 TObject *FindObject(const char *name) const override;
74
75 TDictionary *Find(DeclId_t id) const;
77 TDictionary *Get(DataMemberInfo_t *info, bool skipChecks=kFALSE);
78
79 Bool_t IsLoaded() const { return fIsLoaded; }
80 void AddFirst(TObject *obj) override;
81 void AddFirst(TObject *obj, Option_t *opt) override;
82 void AddLast(TObject *obj) override;
83 void AddLast(TObject *obj, Option_t *opt) override;
84 void AddAt(TObject *obj, Int_t idx) override;
85 void AddAfter(const TObject *after, TObject *obj) override;
86 void AddAfter(TObjLink *after, TObject *obj) override;
87 void AddBefore(const TObject *before, TObject *obj) override;
88 void AddBefore(TObjLink *before, TObject *obj) override;
89
90 TClass *GetClass() const { return fClass; }
91 void SetClass(TClass* cl) { fClass = cl; }
92 void Update(TDictionary *member);
93
94 void RecursiveRemove(TObject *obj) override;
95 TObject *Remove(TObject *obj) override;
96 TObject *Remove(TObjLink *lnk) override;
97
98 void Load();
99 void Unload();
100 void Unload(TDictionary *member);
101
102 ClassDefOverride(TListOfDataMembers,2); // List of TDataMembers for a class
103};
104
105#endif // ROOT_TListOfDataMembers
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
unsigned long long ULong64_t
Definition RtypesCore.h:81
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
char name[80]
Definition TGX11.cxx:110
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
All ROOT classes may have RTTI (run time type identification) support added.
Definition TDataMember.h:31
This class defines an abstract interface that must be implemented by all classes that contain diction...
EMemberSelection
Kinds of members to include in lists.
const void * DeclId_t
This class stores a (key,value) pair using an external hash.
Definition TExMap.h:33
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
Definition THashList.h:34
TObject * FindObject(const char *name) const override
Find object using its name.
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
void Delete(Option_t *option="") override
Delete all TDataMember object files.
void AddAt(TObject *obj, Int_t idx) override
Insert object at location idx in the list.
TObject * FindObject(const char *name) const override
Specialize FindObject to do search for the a data member just by name or create it if its not already...
void RecursiveRemove(TObject *obj) override
Remove object from this collection and recursively remove the object from all other objects (and coll...
void AddAfter(const TObject *after, TObject *obj) override
Insert object after object after in the list.
TDictionary::DeclId_t DeclId_t
TDictionary * Find(DeclId_t id) const
Return (after creating it if necessary) the TDataMember describing the data member corresponding to t...
Bool_t IsLoaded() const
void SetClass(TClass *cl)
void Update(TDictionary *member)
Move the member or data member to the expect set of list.
TDictionary::EMemberSelection fSelection
Mark whether Load was executed.
void Clear(Option_t *option="") override
Remove all objects from the list.
ULong64_t fLastLoadMarker
Holder of TDataMember for unloaded DataMembers.
~TListOfDataMembers()
Destructor.
std::atomic< bool > fIsLoaded
Represent interpreter state when we last did a full load.
TObject * Remove(TObject *obj) override
Remove object from the list.
TListOfDataMembers(const TListOfDataMembers &)=delete
Whether the list should contain regular data members or only using decls or both.
TExMap * fIds
Context of this list. Not owned.
TListOfDataMembers & operator=(const TListOfDataMembers &)=delete
void AddBefore(const TObject *before, TObject *obj) override
Insert object before object before in the list.
TListOfDataMembers(DataMemberList &dmlist)
Construct from a generic collection of data members objects.
void UnmapObject(TObject *obj)
Remove a pair<id, object> from the map of data members and their ids.
TClass * GetClass() const
void MapObject(TObject *obj)
Add a pair<id, object> to the map of data members and their ids.
TListOfDataMembers(TClass *cl, TDictionary::EMemberSelection selection)
Constructor, possibly for all members of a class (or globals).
void Unload()
Mark 'all func' as being unloaded.
THashList * fUnloaded
Map from DeclId_t to TDataMember*.
void AddLast(TObject *obj) override
Add object at the end of the list.
TDictionary * Get(DeclId_t id)
Return (after creating it if necessary) the TDataMember describing the data member corresponding to t...
void Load()
Load all the DataMembers known to the interpreter for the scope 'fClass' into this collection.
void AddFirst(TObject *obj) override
Add object at the beginning of the list.
void Add(TObject *obj) override
Definition TList.h:81
Mother of all ROOT objects.
Definition TObject.h:41