1 #ifndef __JTOOLS__JMULTIHASHMAP__
2 #define __JTOOLS__JMULTIHASHMAP__
41 template<
class JHead_t,
class JTail_t,
class JValue_t,
class JEvaluator_t>
43 public JHashMap<JHead_t, JHashMap<JTail_t, JValue_t, JEvaluator_t>, JEvaluator_t>
61 using map_type::erase;
69 JHashMap(
const JEvaluator_t& evaluator = JEvaluator_t()) :
70 JHashMap<JHead_t,
JHashMap<JTail_t, JValue_t, JEvaluator_t>, JEvaluator_t>(evaluator)
74 class super_const_iterator;
80 class super_iterator :
81 public JEquals <super_iterator>,
128 virtual bool equals(
const super_iterator& cursor)
const
130 return i == cursor.i && (i == range.second || second.equals(cursor.second));
141 if (!second.increment()) {
143 while (++i != range.second) {
145 second = i->second.super_begin();
147 if (second != i->second.super_end()) {
153 return i != range.second;
175 return second.getValue();
188 range(__begin, __end)
190 for (i = range.first; i != range.second; ++i) {
192 second = i->second.super_begin();
194 if (second != i->second.super_end()) {
203 typename mapped_type::super_iterator
second;
210 class super_const_iterator :
211 public JEquals <super_const_iterator>,
236 range (cursor.range),
238 second(cursor.second)
270 virtual bool equals(
const super_const_iterator& cursor)
const
272 return i == cursor.i && (i == range.second || second.equals(cursor.second));
283 if (!second.increment()) {
285 while (++i != range.second) {
287 second = i->second.super_begin();
289 if (second != i->second.super_end()) {
295 return i != range.second;
317 return second.getValue();
330 range(__begin, __end)
332 for (i = range.first; i != range.second; ++i) {
334 second = i->second.super_begin();
336 if (second != i->second.super_end()) {
345 typename mapped_type::super_const_iterator
second;
356 return super_const_iterator(this->begin(), this->end());
367 return super_const_iterator(this->end(), this->end());
378 return super_iterator(this->begin(), this->end());
389 return super_iterator(this->end(), this->end());
462 template<
class JHead_t,
class JValue_t,
class JEvaluator_t>
464 public JHashMap<JHead_t, JValue_t, JEvaluator_t>
485 JHashMap(
const JEvaluator_t& evaluator = JEvaluator_t()) :
486 JHashMap<JHead_t, JValue_t, JEvaluator_t>(evaluator)
490 class super_const_iterator;
496 class super_iterator :
497 public JEquals <super_iterator>,
544 virtual bool equals(
const super_iterator& cursor)
const
546 return i == cursor.i;
557 return ++i != range.second;
591 range(__begin, __end),
604 class super_const_iterator :
605 public JEquals <super_const_iterator>,
663 virtual bool equals(
const super_const_iterator& cursor)
const
665 return i == cursor.i;
676 return ++i != range.second;
710 range(__begin, __end),
727 return super_const_iterator(this->begin(), this->end());
738 return super_const_iterator(this->end(), this->end());
749 return super_iterator(this->begin(), this->end());
760 return super_iterator(this->end(), this->end());
General purpose class for hash map of unique elements.
Data structure based on type list.
Interface for binary input.
Interface for binary output.
Template interface for method bool increment().
Exception for accessing an index in a collection that is outside of its range.
The template JSinglePointer class can be used to hold a pointer to an object.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Template for generic class types.
Template definition of auxiliary base class for comparison of data structures.
Auxiliary class for no type definition.
Auxiliary class for recursive type list generation.