#ifndef ROOT_TObjectTable #define ROOT_TObjectTable //+SEQ,CopyRight,T=NOINCLUDE. ////////////////////////////////////////////////////////////////////////// // // // TObjectTable // // // // This class registers all instances of TObject and its derived // // classes in a hash table. The Add() and Remove() members are called // // from the TObject ctor and dtor, repectively. Using the Print() // // member one can see all currently active objects in the system. // // Using the runtime flag: Root.ObjectStat one can toggle this feature // // on or off. // // // ////////////////////////////////////////////////////////////////////////// #ifndef ROOT_TObject //*KEEP,TObject. #include "TObject.h" //*KEND. #endif class TClass; class TObjectTable : public TObject { private: TObject **fTable; Int_t fSize; Int_t fTally; Bool_t HighWaterMark(); void Expand(Int_t newsize); Int_t FindElement(TObject *obj); void FixCollisions(Int_t index); public: TObjectTable(Int_t tableSize = 100); ~TObjectTable(); void Add(TObject *obj); void *CheckPtrAndWarn(const char *msg, void *vp); void Delete(Option_t *opt = ""); Int_t GetSize() const { return fSize; } Int_t Instances() const { return fTally; } void InstanceStatistics(); void Print(Option_t *option=""); Bool_t PtrIsValid(TObject *obj); void Remove(TObject *obj); void RemoveQuietly(TObject *obj); void Statistics() { Print(); } void Terminate(); void UpdateInstCount(); static void AddObj(TObject *obj); ClassDef(TObjectTable,0) //Table of active objects }; inline Bool_t TObjectTable::HighWaterMark() { return (Bool_t) (fTally >= ((3*fSize)/4)); } inline Bool_t TObjectTable::PtrIsValid(TObject *op) { return fTable[FindElement(op)] != 0; } R__EXTERN TObjectTable *gObjectTable; #endif