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 void PrintCollectionEntry(TObject* entry, Option_t* option, Int_t recurse) const override;
54
55public:
57
59 virtual ~TMap();
60 void Add(TObject *obj) override;
61 void Add(TObject *key, TObject *value);
63 Int_t Capacity() const;
64 void Clear(Option_t *option="") override;
65 Int_t Collisions(const char *keyname) const;
66 Int_t Collisions(TObject *key) const;
67 void Delete(Option_t *option="") override;
68 void DeleteKeys() { Delete(); }
69 void DeleteValues();
70 void DeleteAll();
72 TObject *FindObject(const char *keyname) const override;
73 TObject *FindObject(const TObject *key) const override;
74 TObject **GetObjectRef(const TObject *obj) const override { 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); }
81 TIterator *MakeIterator(Bool_t dir = kIterForward) const override;
82 void Rehash(Int_t newCapacity, Bool_t checkObjValidity = kTRUE);
83 TObject *Remove(TObject *key) override;
85 virtual void SetOwnerValue(Bool_t enable = kTRUE);
86 virtual void SetOwnerKeyValue(Bool_t ownkeys = kTRUE, Bool_t ownvals = kTRUE);
87 Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override;
88 Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const override;
89
90 ClassDefOverride(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:
112 TPair(const TPair &a) : TObject(), fKey(a.fKey), fValue(a.fValue) { }
113 virtual ~TPair();
114 Bool_t IsFolder() const override { return kTRUE;}
115 void Browse(TBrowser *b) override;
116 const char *GetName() const override { return fKey->GetName(); }
117 const char *GetTitle() const override { return fKey->GetTitle(); }
118 ULong_t Hash() const override { return fKey->Hash(); }
119 Bool_t IsEqual(const TObject *obj) const override { 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 ClassDefOverride(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
146private:
147 const TMap *fMap; //map being iterated
148 THashTableIter *fCursor; //current position in map
149 Bool_t fDirection; //iteration direction
150
151 TMapIter() : fMap(nullptr), fCursor(nullptr), fDirection(kIterForward) { }
152
153public:
154 using iterator_category = std::bidirectional_iterator_tag;
156 using difference_type = std::ptrdiff_t;
157 using pointer = TObject **;
158 using const_pointer = const TObject **;
159 using reference = const TObject *&;
160
161 TMapIter(const TMap *map, Bool_t dir = kIterForward);
162 TMapIter(const TMapIter &iter);
163 ~TMapIter();
164 TIterator &operator=(const TIterator &rhs) override;
165 TMapIter &operator=(const TMapIter &rhs);
166
167 const TCollection *GetCollection() const override { return fMap; }
168 TObject *Next() override;
169 void Reset() override;
170 Bool_t operator!=(const TIterator &aIter) const override;
171 Bool_t operator!=(const TMapIter &aIter) const;
172 TObject *operator*() const override;
173
174 ClassDefOverride(TMapIter,0) //Map iterator
175};
176
177#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600
178#pragma GCC diagnostic pop
179#endif
180
181#endif
bool Bool_t
Definition: RtypesCore.h:63
int Int_t
Definition: RtypesCore.h:45
float Float_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:100
unsigned long ULong_t
Definition: RtypesCore.h:55
const char Option_t
Definition: RtypesCore.h:66
#define BIT(n)
Definition: Rtypes.h:85
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
const Bool_t kIterForward
Definition: TCollection.h:42
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
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 override
Return address of pointer to obj.
Definition: THashTable.cxx:296
Iterator abstract base class.
Definition: TIterator.h:30
Iterator of map.
Definition: TMap.h:144
std::ptrdiff_t difference_type
Definition: TMap.h:156
std::bidirectional_iterator_tag iterator_category
Definition: TMap.h:154
TObject * operator*() const override
Return pointer to current object (a TPair) or nullptr.
Definition: TMap.cxx:583
TObject * Next() override
Returns the next key from a map.
Definition: TMap.cxx:542
THashTableIter * fCursor
Definition: TMap.h:148
~TMapIter()
Map iterator dtor.
Definition: TMap.cxx:533
const TCollection * GetCollection() const override
Definition: TMap.h:167
Bool_t operator!=(const TIterator &aIter) const override
This operator compares two TIterator objects.
Definition: TMap.cxx:563
const TMap * fMap
Definition: TMap.h:147
void Reset() override
Reset the map iterator.
Definition: TMap.cxx:555
Bool_t fDirection
Definition: TMap.h:149
TMapIter()
Definition: TMap.h:151
TIterator & operator=(const TIterator &rhs) override
Overridden assignment operator.
Definition: TMap.cxx:498
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
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
void Delete(Option_t *option="") override
Remove all (key,value) pairs from the map AND delete the keys when they are allocated on the heap.
Definition: TMap.cxx:134
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
THashTable * fTable
Definition: TMap.h:45
void Add(TObject *obj) override
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
Definition: TMap.cxx:54
virtual void SetOwnerKeyValue(Bool_t ownkeys=kTRUE, Bool_t ownvals=kTRUE)
Set ownership for keys and values.
Definition: TMap.cxx:352
TObject * FindObject(const char *keyname) const override
Check if a (key,value) pair exists with keyname as name of the key.
Definition: TMap.cxx:215
void PrintCollectionEntry(TObject *entry, Option_t *option, Int_t recurse) const override
Print the collection entry.
Definition: TMap.cxx:266
Float_t AverageCollisions() const
Return the ratio of entries vs occupied slots.
Definition: TMap.cxx:73
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
Write all objects in this map.
Definition: TMap.cxx:432
TObject * Remove(TObject *key) override
Remove the (key,value) pair with key from the map.
Definition: TMap.cxx:296
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
void Clear(Option_t *option="") override
Remove all (key,value) pairs from the map.
Definition: TMap.cxx:97
TObject ** GetObjectRef(const TObject *obj) const override
Definition: TMap.h:74
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Create an iterator for TMap.
Definition: TMap.cxx:258
@ 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
TMap(const TMap &map)=delete
TObject * operator()(const TObject *key) const
Definition: TMap.h:80
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
Mother of all ROOT objects.
Definition: TObject.h:41
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:559
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:433
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition: TObject.h:201
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:477
virtual ULong_t Hash() const
Return hash value for this object.
Definition: TObject.cxx:509
EStatusBits
Definition: TObject.h:61
Class used by TMap to store (key,value) pairs.
Definition: TMap.h:102
void Browse(TBrowser *b) override
Browse the pair.
Definition: TMap.cxx:453
const char * GetName() const override
Returns name of object.
Definition: TMap.h:116
void SetValue(TObject *val)
Definition: TMap.h:122
TObject * Value() const
Definition: TMap.h:121
TObject * fValue
Definition: TMap.h:106
TPair(const TPair &a)
Definition: TMap.h:112
const char * GetTitle() const override
Returns title of object.
Definition: TMap.h:117
TObject * fKey
Definition: TMap.h:105
ULong_t Hash() const override
Return hash value for this object.
Definition: TMap.h:118
virtual ~TPair()
TPair destructor.
Definition: TMap.cxx:444
Bool_t IsFolder() const override
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
Definition: TMap.h:114
TPair(TObject *key, TObject *value)
Definition: TMap.h:111
TPair & operator=(const TPair &)=delete
TObject * Key() const
Definition: TMap.h:120
Bool_t IsEqual(const TObject *obj) const override
Default equal comparison (objects are equal if they have the same address in memory).
Definition: TMap.h:119
TArc a
Definition: textangle.C:12