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;  
 
   81      public JEquals         <super_iterator>,
 
  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;
 
 
  211      public JEquals         <super_const_iterator>,
 
  236        range (cursor.range),
 
  238        second(cursor.second)
 
 
  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;
 
 
  401      this->get(key.first).get(key.second);
 
 
  415      this->get(key.first).get(key.second);
 
 
  427      this->get(key.first).put(key.second, value);
 
 
  439      if (this->has(key.first))
 
  440        return this->get(key.first).erase(key.second);
 
 
  454      return map_type::has(key.first) && this->get(key.first).has(key.second);
 
 
 
  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;  
 
  497      public JEquals         <super_iterator>,
 
  546        return i == cursor.
i;
 
 
  557        return ++i != range.second;
 
 
  591        range(__begin, __end),
 
 
 
  605      public JEquals         <super_const_iterator>,
 
  665        return i == cursor.
i;
 
 
  676        return ++i != range.second;
 
 
  710        range(__begin, __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.