1 #ifndef __JTOOLS__JMULTIMAP__ 
    2 #define __JTOOLS__JMULTIMAP__ 
   24 namespace JPP { 
using namespace JTOOLS; }
 
   47   template<
class JAbscissa_t,
 
   57   template<
class JAbscissa_t, 
 
   59            template<
class, 
class, 
class> 
class JHead_t, 
 
   63     public JHead_t<JAbscissa_t, JMultiMap<JAbscissa_t, JOrdinate_t, JTail_t, JDistance_t>, JDistance_t>,
 
   64     public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JTail_t>, JDistance_t> >
 
   70     typedef JHead_t<JAbscissa_t,
 
   86     using map_type::insert; 
 
  106       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  120       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  134       static_cast<map_type&
>(*this).mul(value);
 
  147       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) {
 
  198     class super_const_iterator;  
 
  204     class super_iterator :
 
  205       public JEquals         <super_iterator>,
 
  210       friend class super_const_iterator;
 
  256       virtual bool equals(
const super_iterator& cursor)
 const 
  258         return i == cursor.i && (i == 
range.second || second.equals(cursor.second));
 
  269         if (!second.increment()) {
 
  271           while (++i != 
range.second) {
 
  273             second = i->getY().super_begin();
 
  275             if (second != i->getY().super_end()) {
 
  281         return i != 
range.second;
 
  303         return second.getValue();
 
  316         range(__begin, __end)
 
  318         for (i = 
range.first; i != 
range.second; ++i) {
 
  320           second = i->getY().super_begin();
 
  322           if (second != i->getY().super_end()) {
 
  331       typename mapped_type::super_iterator 
second;
 
  338     class super_const_iterator :
 
  339       public JEquals         <super_const_iterator>,
 
  370         second(cursor.second)
 
  402       virtual bool equals(
const super_const_iterator& cursor)
 const 
  404         return i == cursor.i && (i == 
range.second || second.equals(cursor.second));
 
  415         if (!second.increment()) {
 
  417           while (++i != 
range.second) {
 
  419             second = i->getY().super_begin();
 
  421             if (second != i->getY().super_end()) {
 
  427         return i != 
range.second;
 
  449         return second.getValue();
 
  462         range(__begin, __end)
 
  464         for (i = 
range.first; i != 
range.second; ++i) {
 
  466           second = i->getY().super_begin();
 
  468           if (second != i->getY().super_end()) {
 
  477       typename mapped_type::super_const_iterator 
second;
 
  481     class super_const_reverse_iterator;  
 
  487     class super_reverse_iterator :
 
  488       public JEquals         <super_reverse_iterator>,
 
  493       friend class super_const_reverse_iterator;
 
  540       virtual bool equals(
const super_reverse_iterator& cursor)
 const 
  542         return i == cursor.i && (i == 
range.second || second.equals(cursor.second));
 
  553         if (!second.increment()) {
 
  555           while (++i != 
range.second) {
 
  557             second = i->getY().super_rbegin();
 
  559             if (!second.equals(i->getY().super_rend())) {
 
  565         return i != 
range.second;
 
  587         return second.getValue();
 
  600         range(__begin, __end)
 
  602         for (i = 
range.first; i != 
range.second; ++i) {
 
  604           second = i->getY().super_rbegin();
 
  606           if (!second.equals(i->getY().super_rend())) {
 
  615       typename mapped_type::super_reverse_iterator 
second;
 
  622     class super_const_reverse_iterator :
 
  623       public JEquals         <super_const_reverse_iterator>,
 
  654         second(cursor.second)
 
  686       virtual bool equals(
const super_const_reverse_iterator& cursor)
 const 
  688         return i == cursor.i && (i == 
range.second || second.equals(cursor.second));
 
  699         if (!second.increment()) {
 
  701           while (++i != 
range.second) {
 
  703             second = i->getY().super_rbegin();
 
  705             if (second != i->getY().super_rend()) {
 
  711         return i != 
range.second;
 
  733         return second.getValue();
 
  746         range(__begin, __end)
 
  748         for (i = 
range.first; i != 
range.second; ++i) {
 
  750           second = i->getY().super_rbegin();
 
  752           if (second != i->getY().super_rend()) {
 
  761       typename mapped_type::super_const_reverse_iterator 
second;
 
  772       return super_const_iterator(this->begin(), this->end());
 
  783       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
  794       return super_const_iterator(this->end(), this->end());
 
  805       return super_const_reverse_iterator(this->rend(), this->rend());
 
  816       return super_iterator(this->begin(), this->end());
 
  827       return super_reverse_iterator(this->rbegin(), this->rend());
 
  838       return super_iterator(this->end(), this->end());
 
  849       return super_reverse_iterator(this->rend(), this->rend());
 
  861       return this->
get(key.first).
get(key.second);
 
  873       (*this)[key.first].insert(key.second, value);
 
  914   template<
class JAbscissa_t,
 
  916            template<
class, 
class, 
class> 
class JHead_t,
 
  919     public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
 
  920     public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
 
  924     enum { NUMBER_OF_DIMENSIONS = 1 };
 
  926     typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>   
map_type;
 
  941     using map_type::insert; 
 
  961       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  975       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  989       static_cast<map_type&
>(*this).mul(value);
 
 1002       static_cast<map_type&
>(*this).div(value);
 
 1014     template<
class JFunction_t>
 
 1038     template<
unsigned int N, 
unsigned int M>
 
 1045     class super_const_iterator;  
 
 1051     class super_iterator :
 
 1052       public JEquals         <super_iterator>,
 
 1057       friend class super_const_iterator;
 
 1104       virtual bool equals(
const super_iterator& cursor)
 const 
 1106         return i == cursor.i;
 
 1117         return ++i != 
range.second;
 
 1151         range(__begin, __end),
 
 1164     class super_const_iterator :
 
 1165       public JEquals         <super_const_iterator>,
 
 1227       virtual bool equals(
const super_const_iterator& cursor)
 const 
 1229         return i == cursor.i;
 
 1240         return ++i != 
range.second;
 
 1274         range(__begin, __end),
 
 1284     class super_const_reverse_iterator;  
 
 1290     class super_reverse_iterator :
 
 1291       public JEquals         <super_iterator>,
 
 1296       friend class super_const_reverse_iterator;
 
 1343       virtual bool equals(
const super_reverse_iterator& cursor)
 const 
 1345         return i == cursor.i;
 
 1356         return ++i != 
range.second;
 
 1390         range(__begin, __end),
 
 1403     class super_const_reverse_iterator :
 
 1404       public JEquals         <super_const_reverse_iterator>,
 
 1466       virtual bool equals(
const super_const_reverse_iterator& cursor)
 const 
 1468         return i == cursor.i;
 
 1479         return ++i != 
range.second;
 
 1513         range(__begin, __end),
 
 1530       return super_const_iterator(this->begin(), this->end());
 
 1541       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
 1552       return super_const_iterator(this->end(), this->end());
 
 1563       return super_const_reverse_iterator(this->rend(), this->rend());
 
 1574       return super_iterator(this->begin(), this->end());
 
 1585       return super_reverse_iterator(this->rbegin(), this->rend());
 
 1596       return super_iterator(this->end(), this->end());
 
 1607       return super_reverse_iterator(this->rend(), this->rend());
 
 1619       return get(key.first);
 
Template interface for method bool increment(). 
 
Auxiliary base class for aritmetic operations of derived class types. 
 
T get(const JHead &header)
Get object from header. 
 
The template JSinglePointer class can be used to hold a pointer to an object. 
 
Template definition of auxiliary base class for comparison of data structures. 
 
Auxiliary class for no type definition. 
 
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
 
Base class for data structures with artithmetic capabilities.