CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc > Class Template Reference

#include <OtherHashMaps.h>

Classes

class  item_iterator
 
struct  KeyItem
 
struct  ValueItem
 

Public Types

typedef Hasher hasher
 
typedef
SimpleAllocHashMultiMap< K, V,
Hasher, Equals, Alloc > 
map_type
 
typedef item_iterator< ValueItemvalue_iterator
 
typedef std::conditional
< std::is_pointer< V >::value,
V, V const & >::type 
value_ref
 

Public Member Functions

void clear (size_t newBucketSize=0)
 
void dump ()
 
bool empty () const
 
void freeRows ()
 
void insert (K const &key, value_ref value)
 
 SimpleAllocHashMultiMap (size_t buckets, size_t keyRowSize, size_t valueRowSize, size_t maxRows=50)
 
value_iterator values (K const &key)
 
 ~SimpleAllocHashMultiMap ()
 

Private Types

typedef Alloc::template rebind
< KeyItem >::other 
KeyItemAllocator
 
typedef Alloc::template rebind
< KeyItem * >::other 
KeyItemPtrAllocator
 
typedef Alloc::template rebind
< ValueItem >::other 
ValueItemAllocator
 

Private Member Functions

KeyItemfind_or_insert_ (K const &key)
 
KeyItempush_back_ (K const &key, KeyItem *next)
 
ValueItempush_back_ (value_ref value, ValueItem *next)
 

Private Attributes

size_t bucketCapacity_
 
KeyItem ** buckets_
 
size_t bucketSize_
 
std::list< KeyItem * >::iterator currentKeyRow_
 
std::list< ValueItem * >::iterator currentValueRow_
 
Equals eq_
 
Hasher hasher_
 
KeyItemAllocator keyAlloc_
 
KeyItemkeyEndMarker_
 
std::list< KeyItem * > keyRows_
 
size_t keyRowSize_
 
size_t maxRows_
 
KeyItemnextKeyItem_
 
ValueItemnextValueItem_
 
KeyItemPtrAllocator ptrAlloc_
 
ValueItemAllocator valueAlloc_
 
ValueItemvalueEndMarker_
 
std::list< ValueItem * > valueRows_
 
size_t valueRowSize_
 

Detailed Description

template<typename K, typename V, typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
class cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >

Definition at line 29 of file OtherHashMaps.h.

Member Typedef Documentation

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef Hasher cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::hasher

Definition at line 31 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef Alloc::template rebind<KeyItem>::other cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItemAllocator
private

Definition at line 116 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef Alloc::template rebind<KeyItem *>::other cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItemPtrAllocator
private

Definition at line 117 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef SimpleAllocHashMultiMap<K, V, Hasher, Equals, Alloc> cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::map_type

Definition at line 35 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef item_iterator<ValueItem> cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::value_iterator

Definition at line 111 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef std::conditional<std::is_pointer<V>::value, V, V const &>::type cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::value_ref

Definition at line 37 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
typedef Alloc::template rebind<ValueItem>::other cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::ValueItemAllocator
private

Definition at line 118 of file OtherHashMaps.h.

Constructor & Destructor Documentation

template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::SimpleAllocHashMultiMap ( size_t  buckets,
size_t  keyRowSize,
size_t  valueRowSize,
size_t  maxRows = 50 
)

Definition at line 201 of file OtherHashMaps.h.

References cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketCapacity_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::buckets_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::clear(), cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyAlloc_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRows_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRowSize_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::ptrAlloc_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueAlloc_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRows_, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRowSize_.

205  : bucketSize_(buckets),
207  keyRowSize_(keyRowSize),
208  valueRowSize_(valueRowSize),
209  maxRows_(maxRows) {
210  buckets_ = ptrAlloc_.allocate(bucketCapacity_);
211  keyRows_.push_back(keyAlloc_.allocate(keyRowSize_));
212  valueRows_.push_back(valueAlloc_.allocate(valueRowSize_));
213  clear();
214  }
std::list< ValueItem * > valueRows_
void clear(size_t newBucketSize=0)
Definition: OtherHashMaps.h:43
std::list< KeyItem * > keyRows_
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::~SimpleAllocHashMultiMap ( )

Definition at line 216 of file OtherHashMaps.h.

References dqmdumpme::last.

216  {
217  for (typename std::list<KeyItem *>::iterator it = keyRows_.begin(), last = keyRows_.end(); it != last; ++it) {
218  keyAlloc_.deallocate(*it, keyRowSize_);
219  }
220  for (typename std::list<ValueItem *>::iterator it = valueRows_.begin(), last = valueRows_.end(); it != last; ++it) {
221  valueAlloc_.deallocate(*it, valueRowSize_);
222  }
223  ptrAlloc_.deallocate(buckets_, bucketCapacity_);
224  }
std::list< ValueItem * > valueRows_
tuple last
Definition: dqmdumpme.py:56
std::list< KeyItem * > keyRows_

Member Function Documentation

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
void cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::clear ( size_t  newBucketSize = 0)
inline

Definition at line 43 of file OtherHashMaps.h.

References cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketCapacity_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::buckets_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketSize_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentKeyRow_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentValueRow_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::freeRows(), cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyEndMarker_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRows_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRowSize_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::maxRows_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextKeyItem_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextValueItem_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::ptrAlloc_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueEndMarker_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRows_, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRowSize_.

Referenced by cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::SimpleAllocHashMultiMap().

43  {
44  if (newBucketSize != 0) {
45  if (newBucketSize > bucketCapacity_) {
46  ptrAlloc_.deallocate(buckets_, bucketCapacity_);
47  bucketCapacity_ = newBucketSize;
49  }
50  bucketSize_ = newBucketSize;
51  }
52  memset(buckets_, 0, bucketSize_ * sizeof(KeyItem *));
53  currentKeyRow_ = keyRows_.begin();
54  nextKeyItem_ = keyRows_.front();
56  currentValueRow_ = valueRows_.begin();
57  nextValueItem_ = valueRows_.front();
59  if ((keyRows_.size() > maxRows_) || (valueRows_.size() > maxRows_))
60  freeRows();
61  }
std::list< ValueItem * > valueRows_
std::list< ValueItem * >::iterator currentValueRow_
std::list< KeyItem * > keyRows_
std::list< KeyItem * >::iterator currentKeyRow_
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
void cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::dump ( void  )
inline

Definition at line 148 of file OtherHashMaps.h.

References cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketCapacity_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::buckets_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketSize_, gather_cfg::cout, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentKeyRow_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentValueRow_, HLT_FULL_cff::distance, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRows_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRowSize_, dqmdumpme::last, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextKeyItem_, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextValueItem_, AlCaHLTBitMon_ParallelJobs::p, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRows_, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRowSize_.

148  {
149  std::cout << "Dumping HASH MULTIMAP" << std::endl;
150  std::cout << " Key items: "
152  << std::endl;
153  std::cout << " Value items: "
156  << std::endl;
157  size_t row = 0;
158  std::cout << " Buckets (size " << bucketSize_ << ", capacity " << bucketCapacity_ << ")";
159  for (KeyItem **p = buckets_; p != buckets_ + bucketSize_; ++p, ++row) {
160  std::cout << " [" << row << "] " << *p << std::endl;
161  }
162  row = 0;
163  std::cout << " Key Items " << std::endl;
164  for (typename std::list<KeyItem *>::iterator it = keyRows_.begin(), last = keyRows_.end(); it != last;
165  ++it, ++row) {
166  KeyItem *lastI = *it + keyRowSize_;
167  std::cout << " Key Row " << row << " (of size " << keyRowSize_ << ")" << std::endl;
168  for (KeyItem *p = *it; p != lastI; ++p) {
169  std::cout << " @ " << p << " [" << p->key << ", @" << p->value << "], next = " << p->next << std::endl;
170  if ((it == currentKeyRow_) && (p == nextKeyItem_ - 1)) {
171  std::cout << " ^^^ this was the last valid item." << std::endl;
172  last = 0;
173  break;
174  }
175  }
176  if (lastI == 0)
177  break;
178  }
179  row = 0;
180  std::cout << " Value Items " << std::endl;
181  for (typename std::list<ValueItem *>::iterator it = valueRows_.begin(), last = valueRows_.end(); it != last;
182  ++it, ++row) {
183  ValueItem *lastI = *it + valueRowSize_;
184  std::cout << " Value Row " << row << " (of size " << valueRowSize_ << ")" << std::endl;
185  for (ValueItem *p = *it; p != lastI; ++p) {
186  std::cout << " @ " << p << " [" << p->value << "], next = " << p->next << std::endl;
187  if ((it == currentValueRow_) && (p == nextValueItem_ - 1)) {
188  std::cout << " ^^^ this was the last valid item." << std::endl;
189  last = 0;
190  break;
191  }
192  }
193  if (lastI == 0)
194  break;
195  }
196  std::cout << " End of dump" << std::endl;
197  }
std::list< ValueItem * > valueRows_
std::list< ValueItem * >::iterator currentValueRow_
tuple cout
Definition: gather_cfg.py:144
tuple last
Definition: dqmdumpme.py:56
std::list< KeyItem * > keyRows_
std::list< KeyItem * >::iterator currentKeyRow_
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
bool cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::empty ( void  ) const
inline
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem & cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::find_or_insert_ ( K const &  key)
private

Definition at line 283 of file OtherHashMaps.h.

References cond::hash, cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem::key, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem::next.

283  {
284  //std::cout << "Find or insert for key " << key << std::endl;
285  size_t hash = hasher_(key);
286  KeyItem *&buck = buckets_[hash % bucketSize_];
287  KeyItem *curr = buck;
288  while (curr) {
289  if (eq_(curr->key, key)) {
290  //std::cout << " Key " << key << " was found." << std::endl;
291  return *curr;
292  }
293  curr = curr->next;
294  }
295  buck = push_back_(key, buck);
296  return *buck;
297  }
KeyItem * push_back_(K const &key, KeyItem *next)
tuple key
prepare the HTCondor submission files and eventually submit them
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
void cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::freeRows ( )

Definition at line 227 of file OtherHashMaps.h.

References dqmdumpme::last.

Referenced by cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::clear().

227  {
228  if (keyRows_.size() > maxRows_) {
229  //std::cerr << "Freeing key rows, current size is " << keyRows_.size() << std::endl;
230  typename std::list<KeyItem *>::iterator it = keyRows_.begin(), last = keyRows_.end();
231  for (std::advance(it, maxRows_); it != last; ++it) {
232  keyAlloc_.deallocate(*it, keyRowSize_);
233  }
234  keyRows_.resize(maxRows_);
235  }
236  if (valueRows_.size() > maxRows_) {
237  //std::cerr << "Freeing value rows, current size is " << valueRows_.size() << std::endl;
238  typename std::list<ValueItem *>::iterator it = valueRows_.begin(), last = valueRows_.end();
239  for (std::advance(it, maxRows_); it != last; ++it) {
240  valueAlloc_.deallocate(*it, valueRowSize_);
241  }
242  valueRows_.resize(maxRows_);
243  }
244  }
std::list< ValueItem * > valueRows_
tuple last
Definition: dqmdumpme.py:56
std::list< KeyItem * > keyRows_
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
void cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::insert ( K const &  key,
value_ref  value 
)

Definition at line 300 of file OtherHashMaps.h.

References isotrackApplyRegressor::k, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem::value.

Referenced by BeautifulSoup.PageElement::_invert(), and SequenceTypes.Schedule::_replaceIfHeldDirectly().

300  {
301  //std::cout << "Pushing back value " << value << " for key " << key << std::endl;
302  KeyItem &k = find_or_insert_(key);
303  //std::cout << "Key " << (k.value ? "exists" : " is new") << std::endl;
304  k.value = push_back_(value, k.value);
305  }
KeyItem & find_or_insert_(K const &key)
KeyItem * push_back_(K const &key, KeyItem *next)
tuple key
prepare the HTCondor submission files and eventually submit them
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem * cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::push_back_ ( K const &  key,
KeyItem next 
)
private

Definition at line 248 of file OtherHashMaps.h.

248  {
249  if (nextKeyItem_ == keyEndMarker_) {
250  ++currentKeyRow_;
251  if (currentKeyRow_ == keyRows_.end()) {
252  keyRows_.push_back(keyAlloc_.allocate(keyRowSize_));
253  currentKeyRow_ = keyRows_.end();
254  --currentKeyRow_; // end - 1 doesn't work!
255  }
258  }
259  keyAlloc_.construct(nextKeyItem_, KeyItem(next, key, nullptr));
260  nextKeyItem_++;
261  return (nextKeyItem_ - 1);
262  }
tuple key
prepare the HTCondor submission files and eventually submit them
std::list< KeyItem * > keyRows_
std::list< KeyItem * >::iterator currentKeyRow_
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::ValueItem * cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::push_back_ ( value_ref  value,
ValueItem next 
)
private

Definition at line 265 of file OtherHashMaps.h.

265  {
268  if (currentValueRow_ == valueRows_.end()) {
269  valueRows_.push_back(valueAlloc_.allocate(valueRowSize_));
271  --currentValueRow_; // end - 1 doesn't work!
272  }
275  }
276  valueAlloc_.construct(nextValueItem_, ValueItem(next, value));
277  nextValueItem_++;
278  return (nextValueItem_ - 1);
279  }
std::list< ValueItem * > valueRows_
std::list< ValueItem * >::iterator currentValueRow_
template<typename K , typename V , typename Hasher , typename Equals , typename Alloc >
SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::value_iterator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::values ( K const &  key)

Definition at line 309 of file OtherHashMaps.h.

References cond::hash, and cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::KeyItem::next.

309  {
310  //std::cout << "Gettinv values for key " << key << std::endl;
311  size_t hash = hasher_(key);
312  for (KeyItem *curr = buckets_[hash % bucketSize_]; curr; curr = curr->next) {
313  if (eq_(curr->key, key))
314  return value_iterator(curr->value);
315  }
316  return value_iterator();
317  }
item_iterator< ValueItem > value_iterator
tuple key
prepare the HTCondor submission files and eventually submit them

Member Data Documentation

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
size_t cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketCapacity_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
KeyItem** cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::buckets_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
size_t cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::bucketSize_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
std::list<KeyItem *>::iterator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentKeyRow_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
std::list<ValueItem *>::iterator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::currentValueRow_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
Equals cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::eq_
private

Definition at line 138 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
Hasher cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::hasher_
private

Definition at line 137 of file OtherHashMaps.h.

template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
KeyItemAllocator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyAlloc_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
KeyItem * cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyEndMarker_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
std::list<KeyItem *> cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRows_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
size_t cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::keyRowSize_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
size_t cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::maxRows_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
KeyItem* cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextKeyItem_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
ValueItem* cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::nextValueItem_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
KeyItemPtrAllocator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::ptrAlloc_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
ValueItemAllocator cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueAlloc_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
ValueItem * cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueEndMarker_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
std::list<ValueItem *> cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRows_
private
template<typename K , typename V , typename Hasher = std::hash<K>, typename Equals = std::equal_to<K>, typename Alloc = std::allocator<V>>
size_t cmsutil::SimpleAllocHashMultiMap< K, V, Hasher, Equals, Alloc >::valueRowSize_
private