#ifndef ROOT_TListOfFunctions
#define ROOT_TListOfFunctions
#ifndef ROOT_THastList
#include "THashList.h"
#endif
#ifndef ROOT_THastTable
#include "THashTable.h"
#endif
#ifndef ROOT_TDictionary
#include "TDictionary.h"
#endif
class TExMap;
class TFunction;
class TListOfFunctions : public THashList
{
private:
typedef TDictionary::DeclId_t DeclId_t;
TClass *fClass;
TExMap *fIds;
THashList *fUnloaded;
THashTable fOverloads;
ULong64_t fLastLoadMarker;
TListOfFunctions(const TListOfFunctions&);
TListOfFunctions& operator=(const TListOfFunctions&);
TList *GetListForObjectNonConst(const char* name);
void MapObject(TObject *obj);
void UnmapObject(TObject *obj);
public:
TListOfFunctions(TClass *cl);
~TListOfFunctions();
virtual void Clear(Option_t *option);
virtual void Delete(Option_t *option="");
virtual TObject *FindObject(const TObject* obj) const;
virtual TObject *FindObject(const char *name) const;
virtual TList *GetListForObject(const char* name) const;
virtual TList *GetListForObject(const TObject* obj) const;
virtual TIterator *MakeIterator(Bool_t dir = kIterForward) const;
virtual TObject *At(Int_t idx) const;
virtual TObject *After(const TObject *obj) const;
virtual TObject *Before(const TObject *obj) const;
virtual TObject *First() const;
virtual TObjLink *FirstLink() const;
virtual TObject **GetObjectRef(const TObject *obj) const;
virtual TObject *Last() const;
virtual TObjLink *LastLink() const;
virtual Int_t GetLast() const;
virtual Int_t IndexOf(const TObject *obj) const;
virtual Int_t GetSize() const;
TFunction *Get(DeclId_t id);
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);
void RecursiveRemove(TObject *obj);
TObject *Remove(TObject *obj);
TObject *Remove(TObjLink *lnk);
void Load();
void Unload();
void Unload(TFunction *func);
ClassDef(TListOfFunctions,0);
};
class TListOfFunctionsIter : public TListIter
{
public:
TListOfFunctionsIter(const TListOfFunctions *l, Bool_t dir = kIterForward);
using TListIter::operator=;
TObject *Next();
ClassDef(TListOfFunctionsIter,0)
};
#endif // ROOT_TListOfFunctions