Logo ROOT  
Reference Guide
TMap.h
Go to the documentation of this file.
1// @(#)root/cont:$Id$
2// Author: Fons Rademakers 12/11/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_TMap
13#define ROOT_TMap
14
15
16//////////////////////////////////////////////////////////////////////////
17// //
18// TMap //
19// //
20// TMap implements an associative array of (key,value) pairs using a //
21// hash table for efficient retrieval (therefore TMap does not conserve //
22// the order of the entries). The hash value is calculated //
23// using the value returned by the keys Hash() function. Both key and //
24// value need to inherit from TObject. //
25// //
26//////////////////////////////////////////////////////////////////////////
27
28#include "TCollection.h"
29#include "THashTable.h"
30
31#include <iterator>
32
33
34class THashTableIter;
35class TMapIter;
36class TPair;
37class TBrowser;
38
39
40class TMap : public TCollection {
41
42friend class TMapIter;
43
44private:
45 THashTable *fTable; //Hash table used to store TPair's
46
47 TMap(const TMap& map) = delete;
48 TMap& operator=(const TMap& map) = delete;
49
50protected:
52
53 virtual void PrintCollectionEntry(TObject* entry, Option_t* option, Int_t recurse) const;
54
55public:
57
59 virtual ~TMap();
60 void Add(TObject *obj);
61 void Add(TObject *key, TObject *value);
63 Int_t Capacity() const;
64 void Clear(Option_t *option="");
65 Int_t Collisions(const char *keyname) const;
66 Int_t Collisions(TObject *key) const;
67 void Delete(Option_t *option="");
68 void DeleteKeys() { Delete(); }
69 void DeleteValues();
70 void DeleteAll();
72 TObject *FindObject(const char *keyname) const;
73 TObject *FindObject(const TObject *key) const;
74 TObject **GetObjectRef(const TObject *obj) const { return fTable->GetObjectRef(obj); }
75 const THashTable *GetTable() const { return fTable; }
76 TObject *GetValue(const char *keyname) const;
77 TObject *GetValue(const TObject *key) const;
79 TObject *operator()(const char *keyname) const { return GetValue(keyname); }
80 TObject *operator()(const TObject *key) const { return GetValue(key); }
82 void Rehash(Int_t newCapacity, Bool_t checkObjValidity = kTRUE);
83 TObject *Remove(TObject *key);
85 virtual void SetOwnerValue(Bool_t enable = kTRUE);
86 virtual void SetOwnerKeyValue(Bool_t ownkeys = kTRUE, Bool_t ownvals = kTRUE);
87 virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0);
88 virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0) const;
89
90 ClassDef(TMap,3) //A (key,value) map
91};
92
93
94//////////////////////////////////////////////////////////////////////////
95// //
96// TPair //
97// //
98// Class used by TMap to store (key,value) pairs. //
99// //
100//////////////////////////////////////////////////////////////////////////
101
102class TPair : public TObject {
103
104private:
107
108 TPair& operator=(const TPair&) = delete;
109
110public:
111 TPair(TObject *key, TObject *value) : fKey(key), fValue(value) { }
112 TPair(const TPair &a) : TObject(), fKey(a.fKey), fValue(a.fValue) { }
113 virtual ~TPair();
114 Bool_t IsFolder() const { return kTRUE;}
115 virtual void Browse(TBrowser *b);
116 const char *GetName() const { return fKey->GetName(); }
117 const char *GetTitle() const { return fKey->GetTitle(); }
118 ULong_t Hash() const { return fKey->Hash(); }
119 Bool_t IsEqual(const TObject *obj) const { return fKey->IsEqual(obj); }
120 TObject *Key() const { return fKey; }
121 TObject *Value() const { return fValue; }
122 void SetValue(TObject *val) { fValue = val; }
123
124 ClassDef(TPair,0); // Pair TObject*, TObject*
125};
126
127typedef TPair TAssoc; // for backward compatibility
128
129
130// Preventing warnings with -Weffc++ in GCC since it is a false positive for the TMapIter destructor.
131#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600
132#pragma GCC diagnostic push
133#pragma GCC diagnostic ignored "-Weffc++"
134#endif
135
136//////////////////////////////////////////////////////////////////////////
137// //
138// TMapIter //
139// //
140// Iterator of a map. //
141// //
142//////////////////////////////////////////////////////////////////////////
143
144class TMapIter : public TIterator,
145 public std::iterator<std::bidirectional_iterator_tag,
146 TObject*, std::ptrdiff_t,
147 const TObject**, const TObject*&> {
148
149private:
150 const TMap *fMap; //map being iterated
151 THashTableIter *fCursor; //current position in map
152 Bool_t fDirection; //iteration direction
153
154 TMapIter() : fMap(nullptr), fCursor(nullptr), fDirection(kIterForward) { }
155
156public:
157 TMapIter(const TMap *map, Bool_t dir = kIterForward);
158 TMapIter(const TMapIter &iter);
159 ~TMapIter();
160 TIterator &operator=(const TIterator &rhs);
161 TMapIter &operator=(const TMapIter &rhs);
162
163 const TCollection *GetCollection() const { return fMap; }
164 TObject *Next();
165 void Reset();
166 Bool_t operator!=(const TIterator &aIter) const;
167 Bool_t operator!=(const TMapIter &aIter) const;
168 TObject *operator*() const;
169
170 ClassDef(TMapIter,0) //Map iterator
171};
172
173#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600
174#pragma GCC diagnostic pop
175#endif
176
177#endif
#define b(i)
Definition: RSha256.hxx:100
int Int_t
Definition: RtypesCore.h:45
unsigned long ULong_t
Definition: RtypesCore.h:55
bool Bool_t
Definition: RtypesCore.h:63
float Float_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:100
const char Option_t
Definition: RtypesCore.h:66
#define ClassDef(name, id)
Definition: Rtypes.h:325
#define BIT(n)
Definition: Rtypes.h:85
const Bool_t kIterForward
Definition: TCollection.h:42
char name[80]
Definition: TGX11.cxx:110
TPair TAssoc
Definition: TMap.h:127
Using a TBrowser one can browse all ROOT objects.
Definition: TBrowser.h:37
Collection abstract base class.
Definition: TCollection.h:65
@ kInitHashTableCapacity
Definition: TCollection.h:159
Iterator of hash table.
Definition: THashTable.h:114
THashTable implements a hash table to store TObject's.
Definition: THashTable.h:35
TObject ** GetObjectRef(const TObject *obj) const
Return address of pointer to obj.
Definition: THashTable.cxx:296
Iterator abstract base class.
Definition: TIterator.h:30
Iterator of map.
Definition: TMap.h:147
THashTableIter * fCursor
Definition: TMap.h:151
~TMapIter()
Map iterator dtor.
Definition: TMap.cxx:533
TIterator & operator=(const TIterator &rhs)
Overridden assignment operator.
Definition: TMap.cxx:498
const TCollection * GetCollection() const
Definition: TMap.h:163
const TMap * fMap
Definition: TMap.h:150
void Reset()
Reset the map iterator.
Definition: TMap.cxx:555
Bool_t fDirection
Definition: TMap.h:152
TMapIter()
Definition: TMap.h:154
TObject * operator*() const
Return pointer to current object (a TPair) or nullptr.
Definition: TMap.cxx:583
TObject * Next()
Returns the next key from a map.
Definition: TMap.cxx:542
Bool_t operator!=(const TIterator &aIter) const
This operator compares two TIterator objects.
Definition: TMap.cxx:563
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:40
void DeleteAll()
Remove all (key,value) pairs from the map AND delete the keys AND values when they are allocated on t...
Definition: TMap.cxx:168
TIterator * MakeIterator(Bool_t dir=kIterForward) const
Create an iterator for TMap.
Definition: TMap.cxx:258
TPair * RemoveEntry(TObject *key)
Remove (key,value) pair with key from the map.
Definition: TMap.cxx:320
virtual ~TMap()
TMap dtor.
Definition: TMap.cxx:44
virtual void PrintCollectionEntry(TObject *entry, Option_t *option, Int_t recurse) const
Print the collection entry.
Definition: TMap.cxx:266
Int_t Collisions(const char *keyname) const
Returns the number of collisions for a key with a certain name (i.e.
Definition: TMap.cxx:116
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
Definition: TMap.cxx:54
THashTable * fTable
Definition: TMap.h:45
virtual void SetOwnerKeyValue(Bool_t ownkeys=kTRUE, Bool_t ownvals=kTRUE)
Set ownership for keys and values.
Definition: TMap.cxx:352
void Delete(Option_t *option="")
Remove all (key,value) pairs from the map AND delete the keys when they are allocated on the heap.
Definition: TMap.cxx:134
Float_t AverageCollisions() const
Return the ratio of entries vs occupied slots.
Definition: TMap.cxx:73
TObject ** GetObjectRef(const TObject *obj) const
Definition: TMap.h:74
void DeleteKeys()
Definition: TMap.h:68
TObject * operator()(const char *keyname) const
Definition: TMap.h:79
void DeleteValues()
Remove all (key,value) pairs from the map AND delete the values when they are allocated on the heap.
Definition: TMap.cxx:151
Bool_t DeleteEntry(TObject *key)
Remove (key,value) pair with key from the map.
Definition: TMap.cxx:190
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write all objects in this map.
Definition: TMap.cxx:432
@ kIsOwnerValue
Definition: TMap.h:51
Bool_t IsOwnerValue() const
Definition: TMap.h:78
virtual void SetOwnerValue(Bool_t enable=kTRUE)
Set whether this map is the owner (enable==true) of its values.
Definition: TMap.cxx:341
Int_t Capacity() const
Return number of slots in the hashtable.
Definition: TMap.cxx:82
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Definition: TMap.cxx:236
TMap & operator=(const TMap &map)=delete
TMapIter Iterator_t
Definition: TMap.h:56
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
Definition: TMap.cxx:215
TMap(const TMap &map)=delete
TObject * operator()(const TObject *key) const
Definition: TMap.h:80
TObject * Remove(TObject *key)
Remove the (key,value) pair with key from the map.
Definition: TMap.cxx:296
const THashTable * GetTable() const
Definition: TMap.h:75
void Rehash(Int_t newCapacity, Bool_t checkObjValidity=kTRUE)
Rehash the underlaying THashTable (see THashTable::Rehash()).
Definition: TMap.cxx:286
void Clear(Option_t *option="")
Remove all (key,value) pairs from the map.
Definition: TMap.cxx:97
Mother of all ROOT objects.
Definition: TObject.h:37
virtual Bool_t IsEqual(const TObject *obj) const
Default equal comparison (objects are equal if they have the same address in memory).
Definition: TObject.cxx:485
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:359
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition: TObject.h:187
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:403
virtual ULong_t Hash() const
Return hash value for this object.
Definition: TObject.cxx:435
EStatusBits
Definition: TObject.h:57
Class used by TMap to store (key,value) pairs.
Definition: TMap.h:102
Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
Definition: TMap.h:114
void SetValue(TObject *val)
Definition: TMap.h:122
const char * GetTitle() const
Returns title of object.
Definition: TMap.h:117
TObject * Value() const
Definition: TMap.h:121
TObject * fValue
Definition: TMap.h:106
TPair(const TPair &a)
Definition: TMap.h:112
Bool_t IsEqual(const TObject *obj) const
Default equal comparison (objects are equal if they have the same address in memory).
Definition: TMap.h:119
virtual void Browse(TBrowser *b)
Browse the pair.
Definition: TMap.cxx:453
TObject * fKey
Definition: TMap.h:105
const char * GetName() const
Returns name of object.
Definition: TMap.h:116
ULong_t Hash() const
Return hash value for this object.
Definition: TMap.h:118
virtual ~TPair()
TPair destructor.
Definition: TMap.cxx:444
TPair(TObject *key, TObject *value)
Definition: TMap.h:111
TPair & operator=(const TPair &)=delete
TObject * Key() const
Definition: TMap.h:120
auto * a
Definition: textangle.C:12