1 #ifndef __JTOOLS__JMULTIMAP__ 
    2 #define __JTOOLS__JMULTIMAP__ 
   24 namespace JPP { 
using namespace JTOOLS; }
 
   42   template<
class JAbscissa_t,
 
   52   template<
class JAbscissa_t, 
 
   54            template<
class, 
class, 
class> 
class JHead_t, 
 
   58     public JHead_t<JAbscissa_t, JMultiMap<JAbscissa_t, JOrdinate_t, JTail_t, JDistance_t>, JDistance_t>,
 
   59     public JMATH::JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JTail_t>, JDistance_t> >
 
   65     typedef JHead_t<JAbscissa_t,
 
   81     using map_type::insert; 
 
  101       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  115       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  129       static_cast<map_type&
>(*this).mul(value);
 
  142       static_cast<map_type&
>(*this).div(value);
 
  154     template<
class JFunction_t>
 
  159       for (
iterator i = this->begin(); i != this->end(); ++i) {
 
  160         i->getY().for_each(
function);
 
  182     template<
unsigned int N, 
unsigned int M>
 
  187       for (
iterator i = this->begin(); i != this->end(); ++i) {
 
  193     class super_const_iterator;  
 
  199     class super_iterator :
 
  210       friend class super_const_iterator;
 
  249       virtual bool equals(
const super_iterator& cursor)
 const 
  251         return i == cursor.i && (i == range.second || second.equals(cursor.second));
 
  262         if (!second.increment()) {
 
  264           while (++i != range.second) {
 
  266             second = i->getY().super_begin();
 
  268             if (second != i->getY().super_end()) {
 
  274         return i != range.second;
 
  296         return second.getValue();
 
  309         range(__begin, __end)
 
  311         for (i = range.first; i != range.second; ++i) {
 
  313           second = i->getY().super_begin();
 
  315           if (second != i->getY().super_end()) {
 
  324       typename mapped_type::super_iterator 
second;
 
  331     class super_const_iterator :
 
  358         range (cursor.range),
 
  360         second(cursor.second)
 
  392       virtual bool equals(
const super_const_iterator& cursor)
 const 
  394         return i == cursor.i && (i == range.second || second.equals(cursor.second));
 
  405         if (!second.increment()) {
 
  407           while (++i != range.second) {
 
  409             second = i->getY().super_begin();
 
  411             if (second != i->getY().super_end()) {
 
  417         return i != range.second;
 
  439         return second.getValue();
 
  452         range(__begin, __end)
 
  454         for (i = range.first; i != range.second; ++i) {
 
  456           second = i->getY().super_begin();
 
  458           if (second != i->getY().super_end()) {
 
  467       typename mapped_type::super_const_iterator 
second;
 
  478       return super_const_iterator(this->begin(), this->end());
 
  489       return super_const_iterator(this->end(), this->end());
 
  500       return super_iterator(this->begin(), this->end());
 
  511       return super_iterator(this->end(), this->end());
 
  523       return this->
get(key.first).
get(key.second);
 
  535       (*this)[key.first].insert(key.second, value);
 
  576   template<
class JAbscissa_t,
 
  578            template<
class, 
class, 
class> 
class JHead_t,
 
  581     public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
 
  582     public JMATH::JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
 
  586     enum { NUMBER_OF_DIMENSIONS = 1 };
 
  588     typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>   
map_type;
 
  603     using map_type::insert; 
 
  623       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  637       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  651       static_cast<map_type&
>(*this).mul(value);
 
  664       static_cast<map_type&
>(*this).div(value);
 
  676     template<
class JFunction_t>
 
  700     template<
unsigned int N, 
unsigned int M>
 
  707     class super_const_iterator;  
 
  713     class super_iterator :
 
  724       friend class super_const_iterator;
 
  763       virtual bool equals(
const super_iterator& cursor)
 const 
  765         return i == cursor.i;
 
  776         return ++i != range.second;
 
  810         range(__begin, __end),
 
  823     class super_const_iterator :
 
  883       virtual bool equals(
const super_const_iterator& cursor)
 const 
  885         return i == cursor.i;
 
  896         return ++i != range.second;
 
  930         range(__begin, __end),
 
  947       return super_const_iterator(this->begin(), this->end());
 
  958       return super_const_iterator(this->end(), this->end());
 
  969       return super_iterator(this->begin(), this->end());
 
  980       return super_iterator(this->end(), this->end());
 
  992       return get(key.first);
 
Template interface for method bool increment(). 
 
Auxiliary base class for aritmetic operations of derived class types. 
 
The template JSinglePointer class can be used to hold a pointer to an object. 
 
T get(const JHead &head)
Get object from header. 
 
Template definition of auxiliary base class for comparison of data structures. 
 
Auxiliary class for no type definition. 
 
Base class for data structures with artithmetic capabilities.