1 #ifndef __JTOOLS__JMULTIHASHMAP__
2 #define __JTOOLS__JMULTIHASHMAP__
23 namespace JPP {
using namespace JTOOLS; }
39 template<
class JHead_t,
class JTail_t,
class JValue_t,
class JEvaluator_t>
41 public JHashMap<JHead_t, JHashMap<JTail_t, JValue_t, JEvaluator_t>, JEvaluator_t>
59 using map_type::erase;
67 JHashMap(
const JEvaluator_t& evaluator = JEvaluator_t()) :
68 JHashMap<JHead_t,
JHashMap<JTail_t, JValue_t, JEvaluator_t>, JEvaluator_t>(evaluator)
72 class super_const_iterator;
78 class super_iterator :
126 virtual bool equals(
const super_iterator& cursor)
const
128 return i == cursor.i && (i == range.second || second.equals(cursor.second));
139 if (!second.increment()) {
141 while (++i != range.second) {
143 second = i->second.super_begin();
145 if (second != i->second.super_end()) {
151 return i != range.second;
173 return second.getValue();
186 range(__begin, __end)
188 for (i = range.first; i != range.second; ++i) {
190 second = i->second.super_begin();
192 if (second != i->second.super_end()) {
201 typename mapped_type::super_iterator
second;
208 class super_const_iterator :
234 range (cursor.range),
236 second(cursor.second)
268 virtual bool equals(
const super_const_iterator& cursor)
const
270 return i == cursor.i && (i == range.second || second.equals(cursor.second));
281 if (!second.increment()) {
283 while (++i != range.second) {
285 second = i->second.super_begin();
287 if (second != i->second.super_end()) {
293 return i != range.second;
315 return second.getValue();
328 range(__begin, __end)
330 for (i = range.first; i != range.second; ++i) {
332 second = i->second.super_begin();
334 if (second != i->second.super_end()) {
343 typename mapped_type::super_const_iterator
second;
354 return super_const_iterator(this->begin(), this->end());
365 return super_const_iterator(this->end(), this->end());
376 return super_iterator(this->begin(), this->end());
387 return super_iterator(this->end(), this->end());
399 this->
get(key.first).
get(key.second);
413 this->
get(key.first).
get(key.second);
460 template<
class JHead_t,
class JValue_t,
class JEvaluator_t>
462 public JHashMap<JHead_t, JValue_t, JEvaluator_t>
483 JHashMap(
const JEvaluator_t& evaluator = JEvaluator_t()) :
484 JHashMap<JHead_t, JValue_t, JEvaluator_t>(evaluator)
488 class super_const_iterator;
494 class super_iterator :
542 virtual bool equals(
const super_iterator& cursor)
const
544 return i == cursor.i;
555 return ++i != range.second;
589 range(__begin, __end),
602 class super_const_iterator :
661 virtual bool equals(
const super_const_iterator& cursor)
const
663 return i == cursor.i;
674 return ++i != range.second;
708 range(__begin, __end),
725 return super_const_iterator(this->begin(), this->end());
736 return super_const_iterator(this->end(), this->end());
747 return super_iterator(this->begin(), this->end());
758 return super_iterator(this->end(), this->end());
Template interface for method bool increment().
Interface for binary output.
General purpose class for hash map of unique elements.
T get(const JHead &header)
Get object from header.
The template JSinglePointer class can be used to hold a pointer to an object.
Auxiliary class for recursive type list generation.
Template definition of auxiliary base class for comparison of data structures.
Auxiliary class for no type definition.
Interface for binary input.
Template for generic class types.
Data structure based on type list.
Exception for accessing an index in a collection that is outside of its range.