Logo ROOT  
Reference Guide
THashTable.h
Go to the documentation of this file.
1// @(#)root/cont:$Id$
2// Author: Fons Rademakers 27/09/95
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, 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_THashTable
13#define ROOT_THashTable
14
15
16//////////////////////////////////////////////////////////////////////////
17// //
18// THashTable //
19// //
20// THashTable implements a hash table to store TObject's. The hash //
21// value is calculated using the value returned by the TObject's //
22// Hash() function. Each class inheriting from TObject can override //
23// Hash() as it sees fit. //
24// //
25//////////////////////////////////////////////////////////////////////////
26
27#include "TCollection.h"
28#include "TString.h"
29
30class TList;
31class TListIter;
32class THashTableIter;
33
34
35class THashTable : public TCollection {
36
37friend class THashTableIter;
38
39private:
40 TList **fCont; //Hash table (table of lists)
41 Int_t fEntries; //Number of objects in table
42 Int_t fUsedSlots; //Number of used slots
43 Int_t fRehashLevel; //Average collision rate which triggers rehash
44
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; }
49
50 void AddImpl(Int_t slot, TObject *object);
51
52 THashTable(const THashTable&); // not implemented
53 THashTable& operator=(const THashTable&); // not implemented
54
55public:
57 virtual ~THashTable();
58 void Add(TObject *obj);
59 void AddBefore(const TObject *before, TObject *obj);
60 virtual void AddAll(const TCollection *col);
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; }
74 void Print(Option_t *option, Int_t recurse) const;
76 void Rehash(Int_t newCapacity, Bool_t checkObjValidity = kTRUE);
77 TObject *Remove(TObject *obj);
79 void SetRehashLevel(Int_t rehash) { fRehashLevel = rehash; }
80
81 ClassDef(THashTable,0) //A hash table
82};
83
85{
86 if (fUsedSlots)
88 else
89 return 0.0;
90}
91
93{
94 Int_t i = Int_t(obj->CheckedHash() % fSize); // need intermediary i for Linux g++
95 return i;
96}
97
98inline Int_t THashTable::GetHashValue(const TObject *obj) const
99{
100 Int_t i = Int_t(obj->Hash() % fSize); // need intermediary i for Linux g++
101 return i;
102}
103
104
105//////////////////////////////////////////////////////////////////////////
106// //
107// THashTableIter //
108// //
109// Iterator of hash table. //
110// //
111//////////////////////////////////////////////////////////////////////////
112
113class THashTableIter : public TIterator {
114
115private:
116 const THashTable *fTable; //hash table being iterated
117 Int_t fCursor; //current position in table
118 TListIter *fListCursor; //current position in collision list
119 Bool_t fDirection; //iteration direction
120
122 Int_t NextSlot();
123
124public:
126 THashTableIter(const THashTableIter &iter);
128 TIterator &operator=(const TIterator &rhs);
130
131 const TCollection *GetCollection() const { return fTable; }
132 TObject *Next();
133 void Reset();
134 Bool_t operator!=(const TIterator &aIter) const;
135 Bool_t operator!=(const THashTableIter &aIter) const;
136 TObject *operator*() const;
137
138 ClassDef(THashTableIter,0) //Hash table iterator
139};
140
141#endif
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
float Float_t
Definition: RtypesCore.h:53
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:326
const Bool_t kIterForward
Definition: TCollection.h:40
char name[80]
Definition: TGX11.cxx:109
UInt_t Hash(const TString &s)
Definition: TString.h:481
Collection abstract base class.
Definition: TCollection.h:63
@ kInitHashTableCapacity
Definition: TCollection.h:157
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
Iterator of hash table.
Definition: THashTable.h:113
const THashTable * fTable
Definition: THashTable.h:116
Bool_t operator!=(const TIterator &aIter) const
This operator compares two TIterator objects.
Definition: THashTable.cxx:607
~THashTableIter()
Delete hashtable iterator.
Definition: THashTable.cxx:541
void Reset()
Reset the hashtable iterator.
Definition: THashTable.cxx:595
Bool_t fDirection
Definition: THashTable.h:119
Int_t NextSlot()
Returns index of next slot in table containing list to be iterated.
Definition: THashTable.cxx:570
TObject * Next()
Return next object in hashtable. Returns 0 when no more objects in table.
Definition: THashTable.cxx:549
TObject * operator*() const
Return pointer to current object or nullptr.
Definition: THashTable.cxx:627
TIterator & operator=(const TIterator &rhs)
Overridden assignment operator.
Definition: THashTable.cxx:500
TListIter * fListCursor
Definition: THashTable.h:118
const TCollection * GetCollection() const
Definition: THashTable.h:131
THashTable implements a hash table to store TObject's.
Definition: THashTable.h:35
Float_t AverageCollisions() const
Definition: THashTable.h:84
THashTable & operator=(const THashTable &)
TObject * Remove(TObject *obj)
Remove object from the hashtable.
Definition: THashTable.cxx:417
Int_t GetSize() const
Return the capacity of the collection, i.e.
Definition: THashTable.h:72
virtual void AddAll(const TCollection *col)
Add all objects from collection col to this collection.
Definition: THashTable.cxx:138
const TList * GetListForObject(const char *name) const
Return the TList corresponding to object's name based hash value.
Definition: THashTable.cxx:268
Int_t fUsedSlots
Definition: THashTable.h:42
TObject ** GetObjectRef(const TObject *obj) const
Return address of pointer to obj.
Definition: THashTable.cxx:296
void AddImpl(Int_t slot, TObject *object)
Helper function doing the actual add to the table give a slot and object.
Definition: THashTable.cxx:78
TList ** fCont
Definition: THashTable.h:40
void Add(TObject *obj)
Add object to the hash table.
Definition: THashTable.cxx:92
void Rehash(Int_t newCapacity, Bool_t checkObjValidity=kTRUE)
Rehash the hashtable.
Definition: THashTable.cxx:365
TObject * RemoveSlow(TObject *obj)
Remove object from the hashtable without using the hash value.
Definition: THashTable.cxx:442
void AddBefore(const TObject *before, TObject *obj)
Add object to the hash table.
Definition: THashTable.cxx:112
Int_t fEntries
Definition: THashTable.h:41
void Print(Option_t *option, Int_t recurse) const
Print the collection header and its elements.
Definition: THashTable.cxx:328
THashTable(const THashTable &)
Int_t GetRehashLevel() const
Definition: THashTable.h:71
Int_t GetHashValue(TString &s) const
Definition: THashTable.h:47
TIterator * MakeIterator(Bool_t dir=kIterForward) const
Returns a hash table iterator.
Definition: THashTable.cxx:311
TObject * FindObject(const char *name) const
Find object using its name.
Definition: THashTable.cxx:238
void Delete(Option_t *option="")
Remove all objects from the table AND delete all heap based objects.
Definition: THashTable.cxx:220
Int_t Collisions(const char *name) const
Returns the number of collisions for an object with a certain name (i.e.
Definition: THashTable.cxx:191
void SetRehashLevel(Int_t rehash)
Definition: THashTable.h:79
Int_t GetHashValue(const char *str) const
Definition: THashTable.h:48
Int_t fRehashLevel
Definition: THashTable.h:43
virtual ~THashTable()
Delete a hashtable.
Definition: THashTable.cxx:65
Int_t GetCheckedHashValue(TObject *obj) const
Definition: THashTable.h:92
Int_t GetHashValue(const TObject *obj) const
Definition: THashTable.h:98
void Clear(Option_t *option="")
Remove all objects from the table.
Definition: THashTable.cxx:167
Iterator abstract base class.
Definition: TIterator.h:30
Iterator of linked list.
Definition: TList.h:200
A doubly linked list.
Definition: TList.h:44
Mother of all ROOT objects.
Definition: TObject.h:37
ULong_t CheckedHash()
Check and record whether this class has a consistent Hash/RecursiveRemove setup (*) and then return t...
Definition: TObject.h:296
virtual ULong_t Hash() const
Return hash value for this object.
Definition: TObject.cxx:433
Basic string class.
Definition: TString.h:131
static constexpr double s