1 #ifndef __JTOOLS__JMULTIMAP__ 
    2 #define __JTOOLS__JMULTIMAP__ 
   24 namespace JPP { 
using namespace JTOOLS; }
 
   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; 
 
  107       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  121       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  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>
 
  203     struct iterator_base :
 
  204       public JEquals< iterator_base<first_iterator, second_iterator> >
 
  215       struct pointer_type :
 
  216         private JPair<const key_type, second_iterator&>
 
  248         return pointer_type(i->getX(), second);
 
  269       bool equals(
const iterator_base& cursor)
 const 
  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>
 
  308     struct iterator_helper :
 
  309       public iterator_base<first_iterator, second_iterator>,
 
  326                       first_iterator __end)
 
  328         this->
range = std::make_pair(__begin, __end);
 
  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>
 
  369     struct reverse_iterator_helper :
 
  370       public iterator_base<first_iterator, second_iterator>,
 
  371       public JForwardIterator< reverse_iterator_helper<first_iterator, second_iterator> >
 
  387                               first_iterator __end)
 
  389         this->
range = std::make_pair(__begin, __end);
 
  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;  
 
  433     struct super_iterator :
 
  434       public iterator_helper<iterator, typename mapped_type::super_iterator>
 
  438       friend class super_const_iterator;
 
  463     struct 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;
 
  496       bool equals(
const super_const_iterator& cursor)
 const 
  498         return static_cast<const iterator_base<const_iterator, typename mapped_type::super_const_iterator>&
>(*this).equals(cursor);
 
  508       bool equals(
const super_iterator& cursor)
 const 
  510         return equals(super_const_iterator(cursor));
 
  527     class super_const_reverse_iterator;  
 
  533     struct super_reverse_iterator :
 
  534       public reverse_iterator_helper<reverse_iterator, typename mapped_type::super_reverse_iterator>
 
  538       friend class super_const_reverse_iterator;
 
  563     struct super_const_reverse_iterator :
 
  564       public reverse_iterator_helper<const_reverse_iterator, typename mapped_type::super_const_reverse_iterator>,
 
  565       public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
  584         this->
range  = cursor.range;
 
  586         this->second = cursor.second;
 
  596       bool equals(
const super_const_reverse_iterator& cursor)
 const 
  598         return static_cast<const iterator_base<const_reverse_iterator, typename mapped_type::super_const_reverse_iterator>&
>(*this).equals(cursor);
 
  608       bool equals(
const super_reverse_iterator& cursor)
 const 
  610         return equals(super_const_reverse_iterator(cursor));
 
  634       return super_const_iterator(this->begin(), this->end());
 
  645       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
  656       return super_const_iterator(this->end(), this->end());
 
  667       return super_const_reverse_iterator(this->rend(), this->rend());
 
  678       return super_iterator(this->begin(), this->end());
 
  689       return super_reverse_iterator(this->rbegin(), this->rend());
 
  700       return super_iterator(this->end(), this->end());
 
  711       return super_reverse_iterator(this->rend(), this->rend());
 
  723       return this->
get(key.first).
get(key.second);
 
  735       (*this)[key.first].insert(key.second, value);
 
  765   template<
class JAbscissa_t,
 
  767            template<
class, 
class, 
class> 
class JHead_t,
 
  770     public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
 
  771     public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
 
  775     enum { NUMBER_OF_DIMENSIONS = 1 };
 
  777     typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>                     
map_type;
 
  791     using map_type::insert; 
 
  811       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  825       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  839       static_cast<map_type&
>(*this).mul(value);
 
  852       static_cast<map_type&
>(*this).div(value);
 
  863     template<
class JFunction_t>
 
  887     template<
unsigned int N, 
unsigned int M>
 
  898     template<
class iterator_type, 
class ordinate_type>
 
  899     struct iterator_helper :
 
  900       public JEquals         < iterator_helper<iterator_type, ordinate_type> >,
 
  912       struct pointer_type :
 
  913         private JPair<const key_type, value_type>
 
  952                       iterator_type __end) :
 
  953         range(__begin, __end),
 
  965         return pointer_type(i->getX(), i->getY());
 
  986       bool equals(
const iterator_helper& cursor)
 const 
  988         return i == cursor.i;
 
  999         return ++i != 
range.second;
 
 1031     class super_const_iterator;  
 
 1037     struct super_iterator :
 
 1038       public iterator_helper<iterator, ordinate_type&>
 
 1042       friend class super_const_iterator;
 
 1067     struct super_const_iterator :
 
 1068       public iterator_helper<const_iterator, const ordinate_type&>,
 
 1069       public JEquals<super_const_iterator, super_iterator>
 
 1088         this->
range = cursor.range;
 
 1099       bool equals(
const super_const_iterator& cursor)
 const 
 1101         return this->i == cursor.i;
 
 1111       bool equals(
const super_iterator& cursor)
 const 
 1113         return this->i == cursor.i;
 
 1130     class super_const_reverse_iterator;  
 
 1136     struct super_reverse_iterator :
 
 1137       public iterator_helper<reverse_iterator, ordinate_type&>
 
 1141       friend class super_const_reverse_iterator;
 
 1166     struct super_const_reverse_iterator :
 
 1167       public iterator_helper<const_reverse_iterator, const ordinate_type&>,
 
 1168       public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
 1187         this->
range = cursor.range;
 
 1198       bool equals(
const super_const_reverse_iterator& cursor)
 const 
 1200         return this->i == cursor.i;
 
 1210       bool equals(
const super_reverse_iterator& cursor)
 const 
 1212         return this->i == cursor.i;
 
 1236       return super_const_iterator(this->begin(), this->end());
 
 1247       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
 1258       return super_const_iterator(this->end(), this->end());
 
 1269       return super_const_reverse_iterator(this->rend(), this->rend());
 
 1280       return super_iterator(this->begin(), this->end());
 
 1291       return super_reverse_iterator(this->rbegin(), this->rend());
 
 1302       return super_iterator(this->end(), this->end());
 
 1313       return super_reverse_iterator(this->rend(), this->rend());
 
 1325       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. 
 
then usage $script< detector file >< detectorfile > nIf the range of floors is the first detector file is aligned to the second before the comparison nIn this
 
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. 
 
bool equals(const JFirst_t &first, const JSecond_t &second, const double precision=std::numeric_limits< double >::min())
Check equality.