#ifndef ROOT_TListOfDataMembers
#define ROOT_TListOfDataMembers
#ifndef ROOT_THastList
#include "THashList.h"
#endif
#ifndef ROOT_TDictionary
#include "TDictionary.h"
#endif
class TExMap;
class TDataMember;
class TListOfDataMembers : public THashList
{
private:
TClass *fClass;
TExMap *fIds;
THashList *fUnloaded;
Bool_t fIsLoaded;
ULong64_t fLastLoadMarker;
TListOfDataMembers(const TListOfDataMembers&);
TListOfDataMembers& operator=(const TListOfDataMembers&);
void MapObject(TObject *obj);
void UnmapObject(TObject *obj);
public:
typedef TDictionary::DeclId_t DeclId_t;
TListOfDataMembers(TClass *cl = 0);
template<class DataMemberList>
TListOfDataMembers(DataMemberList & dmlist) :
fClass(0),fIds(0),fUnloaded(0),
fIsLoaded(kTRUE), fLastLoadMarker(0)
{
for (auto * dataMember : dmlist)
Add(dataMember);
}
~TListOfDataMembers();
virtual void Clear(Option_t *option);
virtual void Delete(Option_t *option="");
using THashList::FindObject;
virtual TObject *FindObject(const char *name) const;
TDictionary *Find(DeclId_t id) const;
TDictionary *Get(DeclId_t id);
TDictionary *Get(DataMemberInfo_t *info, bool skipChecks=kFALSE);
Bool_t IsLoaded() const { return fIsLoaded; }
void AddFirst(TObject *obj);
void AddFirst(TObject *obj, Option_t *opt);
void AddLast(TObject *obj);
void AddLast(TObject *obj, Option_t *opt);
void AddAt(TObject *obj, Int_t idx);
void AddAfter(const TObject *after, TObject *obj);
void AddAfter(TObjLink *after, TObject *obj);
void AddBefore(const TObject *before, TObject *obj);
void AddBefore(TObjLink *before, TObject *obj);
TClass *GetClass() const { return fClass; }
void SetClass(TClass* cl) { fClass = cl; }
void Update(TDictionary *member);
void RecursiveRemove(TObject *obj);
TObject *Remove(TObject *obj);
TObject *Remove(TObjLink *lnk);
void Load();
void Unload();
void Unload(TDictionary *member);
ClassDef(TListOfDataMembers,2);
};
#endif // ROOT_TListOfDataMembers