1#ifndef __JTOOLS__JMULTIMAP__ 
    2#define __JTOOLS__JMULTIMAP__ 
   48  template<
class JAbscissa_t,
 
   58  template<
class JAbscissa_t, 
 
   60           template<
class, 
class, 
class> 
class JHead_t, 
 
   64    public JHead_t<JAbscissa_t, JMultiMap<JAbscissa_t, JOrdinate_t, JTail_t, JDistance_t>, JDistance_t>,
 
   65    public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JTail_t>, JDistance_t> >
 
   71    typedef JHead_t<JAbscissa_t,
 
   87    using map_type::insert; 
 
   88    using map_type::configure; 
 
  135      static_cast<map_type&
>(*this).mul(value);
 
 
  148      static_cast<map_type&
>(*this).div(value);
 
 
  159    template<
class JFunction_t>
 
  164      for (
iterator i = this->begin(); i != this->end(); ++i) {
 
  165        i->getY().for_each(function);
 
 
  187    template<
unsigned int N, 
unsigned int M>
 
  192      for (
iterator i = this->begin(); i != this->end(); ++i) {
 
 
  202    template<
class first_iterator, 
class second_iterator>
 
  204      public JEquals< iterator_base<first_iterator, second_iterator> >
 
  208      typedef JMultiKey <NUMBER_OF_DIMENSIONS, const abscissa_type>              
multikey_type;
 
  216        private JPair<const key_type, second_iterator>
 
 
  271        return i == cursor.
i && (i == range.second || second.equals(cursor.
second));
 
 
  293        return this->second.getValue();
 
 
 
  307    template<
class first_iterator, 
class second_iterator>
 
  326                      first_iterator __end)
 
  328        this->range = std::make_pair(__begin, __end);
 
  330        for (this->i = this->range.first; this->i != this->range.second; ++(this->i)) {
 
  332          this->second = this->i->getY().super_begin();
 
  334          if (this->second != this->i->getY().super_end()) {
 
 
  348        if (!this->second.increment()) {
 
  350          while (++(this->i) != this->range.second) {
 
  352            this->second = this->i->getY().super_begin();
 
  354            if (this->second != this->i->getY().super_end()) {
 
  360        return this->i != this->range.second;
 
 
 
  368    template<
class first_iterator, 
class second_iterator>
 
  371      public JForwardIterator< reverse_iterator_helper<first_iterator, second_iterator> >
 
  387                              first_iterator __end)
 
  389        this->range = std::make_pair(__begin, __end);
 
  391        for (this->i = this->range.first; this->i != this->range.second; ++(this->i)) {
 
  393          this->second = this->i->getY().super_rbegin();
 
  395          if (this->second != this->i->getY().super_rend()) {
 
 
  409        if (!this->second.increment()) {
 
  411          while (++(this->i) != this->range.second) {
 
  413            this->second = this->i->getY().super_rbegin();
 
  415            if (this->second != this->i->getY().super_rend()) {
 
  421        return this->i != this->range.second;
 
 
 
  427    class super_const_iterator;  
 
  464      public iterator_helper<const_iterator, typename mapped_type::super_const_iterator>,
 
  465      public JEquals<super_const_iterator, super_iterator>
 
  484        this->range  = cursor.
range;
 
  486        this->second = cursor.
second;
 
 
 
  527    class super_const_reverse_iterator;  
 
  565      public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
  584        this->range  = cursor.
range;
 
  586        this->second = cursor.
second;
 
 
 
  723      return this->get(key.first).get(key.second);
 
 
  735      return this->get(key.first).get(key.second);
 
 
  747      (*this)[key.first].insert(key.second, value);
 
 
 
  766  template<
class JAbscissa_t,
 
  768           template<
class, 
class, 
class> 
class JHead_t,
 
  771    public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
 
  772    public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
 
  776    enum { NUMBER_OF_DIMENSIONS = 1 };
 
  778    typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>                     
map_type;
 
  792    using map_type::insert; 
 
  793    using map_type::configure; 
 
  840      static_cast<map_type&
>(*this).mul(value);
 
 
  853      static_cast<map_type&
>(*this).div(value);
 
 
  864    template<
class JFunction_t>
 
  888    template<
unsigned int N, 
unsigned int M>
 
  899    template<
class iterator_type, 
class ordinate_type>
 
  901      public JEquals         < iterator_helper<iterator_type, ordinate_type> >,
 
  906      typedef JMultiKey <NUMBER_OF_DIMENSIONS, const abscissa_type>              
multikey_type;
 
  914        private JPair<const key_type, value_type>
 
 
  953                      iterator_type __end) :
 
  954        range(__begin, __end),
 
 
  989        return i == cursor.
i;
 
 
 1000        return ++i != range.second;
 
 
 
 1070      public JEquals<super_const_iterator, super_iterator>
 
 1089        this->range = cursor.
range;
 
 
 1102        return this->i == cursor.
i;
 
 
 1114        return this->i == cursor.
i;
 
 
 
 1131    class super_const_reverse_iterator;  
 
 1169      public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
 1188        this->range = cursor.
range;
 
 
 1201        return this->i == cursor.
i;
 
 
 1213        return this->i == cursor.
i;
 
 
 
 1326      return get(key.first);
 
 
 1338      return get(key.first);
 
 
 
Base class for data structures with artithmetic capabilities.
 
Template interface for method bool increment().
 
Auxiliary classes and methods for language specific functionality.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Template definition of auxiliary base class for comparison of data structures.
 
Auxiliary class for no type definition.
 
Auxiliary base class for aritmetic operations of derived class types.