12 #ifndef ROOT_THashTable
13 #define ROOT_THashTable
35 class THashTable :
public TCollection {
37 friend class THashTableIter;
45 Int_t GetCheckedHashValue(TObject *obj)
const;
46 Int_t GetHashValue(
const TObject *obj)
const;
47 Int_t GetHashValue(TString &s)
const {
return s.Hash() % fSize; }
48 Int_t GetHashValue(
const char *str)
const { return ::Hash(str) % fSize; }
50 void AddImpl(Int_t slot, TObject *
object);
52 THashTable(
const THashTable&);
53 THashTable& operator=(
const THashTable&);
56 THashTable(Int_t capacity = TCollection::kInitHashTableCapacity, Int_t rehash = 0);
57 virtual ~THashTable();
58 void Add(TObject *obj);
59 void AddBefore(
const TObject *before, TObject *obj);
60 virtual void AddAll(
const TCollection *col);
61 Float_t AverageCollisions()
const;
62 void Clear(Option_t *option=
"");
63 Int_t Collisions(
const char *name)
const;
64 Int_t Collisions(TObject *obj)
const;
65 void Delete(Option_t *option=
"");
66 TObject *FindObject(
const char *name)
const;
67 TObject *FindObject(
const TObject *obj)
const;
68 const TList *GetListForObject(
const char *name)
const;
69 const TList *GetListForObject(
const TObject *obj)
const;
70 TObject **GetObjectRef(
const TObject *obj)
const;
71 Int_t GetRehashLevel()
const {
return fRehashLevel; }
72 Int_t GetSize()
const {
return fEntries; }
73 TIterator *MakeIterator(Bool_t dir = kIterForward)
const;
74 void Print(Option_t *option, Int_t recurse)
const;
75 using TCollection::Print;
76 void Rehash(Int_t newCapacity, Bool_t checkObjValidity = kTRUE);
77 TObject *Remove(TObject *obj);
78 TObject *RemoveSlow(TObject *obj);
79 void SetRehashLevel(Int_t rehash) { fRehashLevel = rehash; }
81 ClassDef(THashTable,0)
84 inline Float_t THashTable::AverageCollisions()
const
87 return ((Float_t)fEntries)/((Float_t)fUsedSlots);
92 inline Int_t THashTable::GetCheckedHashValue(TObject *obj)
const
94 Int_t i = Int_t(obj->CheckedHash() % fSize);
98 inline Int_t THashTable::GetHashValue(
const TObject *obj)
const
100 Int_t i = Int_t(obj->Hash() % fSize);
113 class THashTableIter :
public TIterator {
116 const THashTable *fTable;
118 TListIter *fListCursor;
121 THashTableIter() : fTable(0), fCursor(0), fListCursor(0), fDirection(kIterForward) { }
125 THashTableIter(
const THashTable *ht, Bool_t dir = kIterForward);
126 THashTableIter(
const THashTableIter &iter);
128 TIterator &operator=(
const TIterator &rhs);
129 THashTableIter &operator=(
const THashTableIter &rhs);
131 const TCollection *GetCollection()
const {
return fTable; }
134 Bool_t operator!=(
const TIterator &aIter)
const;
135 Bool_t operator!=(
const THashTableIter &aIter)
const;
136 TObject *operator*()
const;
138 ClassDef(THashTableIter,0)