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.