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);
 
  160     template<
class JFunction_t>
 
  165       for (
iterator i = this->begin(); i != this->end(); ++i) {
 
  166         i->getY().for_each(
function);
 
  188     template<
unsigned int N, 
unsigned int M>
 
  193       for (
iterator i = this->begin(); i != this->end(); ++i) {
 
  203     template<
class first_iterator, 
class second_iterator>
 
  204     struct iterator_base :
 
  205       public JEquals< iterator_base<first_iterator, second_iterator> >
 
  216       struct pointer_type :
 
  217         private JPair<const key_type, second_iterator&>
 
  249         return pointer_type(i->getX(), second);
 
  270       bool equals(
const iterator_base& cursor)
 const 
  272         return i == cursor.i && (i == 
range.second || second.equals(cursor.second));
 
  294         return this->second.getValue();
 
  308     template<
class first_iterator, 
class second_iterator>
 
  309     struct iterator_helper :
 
  310       public iterator_base<first_iterator, second_iterator>,
 
  327                       first_iterator __end)
 
  329         this->
range = std::make_pair(__begin, __end);
 
  333           this->second = this->i->getY().super_begin();
 
  335           if (this->second != this->i->getY().super_end()) {
 
  349         if (!this->second.increment()) {
 
  351           while (++(this->i) != this->
range.second) {
 
  353             this->second = this->i->getY().super_begin();
 
  355             if (this->second != this->i->getY().super_end()) {
 
  361         return this->i != this->
range.second;
 
  369     template<
class first_iterator, 
class second_iterator>
 
  370     struct reverse_iterator_helper :
 
  371       public iterator_base<first_iterator, second_iterator>,
 
  372       public JForwardIterator< reverse_iterator_helper<first_iterator, second_iterator> >
 
  388                               first_iterator __end)
 
  390         this->
range = std::make_pair(__begin, __end);
 
  394           this->second = this->i->getY().super_rbegin();
 
  396           if (this->second != this->i->getY().super_rend()) {
 
  410         if (!this->second.increment()) {
 
  412           while (++(this->i) != this->
range.second) {
 
  414             this->second = this->i->getY().super_rbegin();
 
  416             if (this->second != this->i->getY().super_rend()) {
 
  422         return this->i != this->
range.second;
 
  428     class super_const_iterator;  
 
  434     struct super_iterator :
 
  435       public iterator_helper<iterator, typename mapped_type::super_iterator>
 
  439       friend class super_const_iterator;
 
  464     struct super_const_iterator :
 
  465       public iterator_helper<const_iterator, typename mapped_type::super_const_iterator>,
 
  466       public JEquals<super_const_iterator, super_iterator>
 
  485         this->
range  = cursor.range;
 
  487         this->second = cursor.second;
 
  497       bool equals(
const super_const_iterator& cursor)
 const 
  499         return static_cast<const iterator_base<const_iterator, typename mapped_type::super_const_iterator>&
>(*this).equals(cursor);
 
  509       bool equals(
const super_iterator& cursor)
 const 
  511         return equals(super_const_iterator(cursor));
 
  528     class super_const_reverse_iterator;  
 
  534     struct super_reverse_iterator :
 
  535       public reverse_iterator_helper<reverse_iterator, typename mapped_type::super_reverse_iterator>
 
  539       friend class super_const_reverse_iterator;
 
  564     struct super_const_reverse_iterator :
 
  565       public reverse_iterator_helper<const_reverse_iterator, typename mapped_type::super_const_reverse_iterator>,
 
  566       public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
  585         this->
range  = cursor.range;
 
  587         this->second = cursor.second;
 
  597       bool equals(
const super_const_reverse_iterator& cursor)
 const 
  599         return static_cast<const iterator_base<const_reverse_iterator, typename mapped_type::super_const_reverse_iterator>&
>(*this).equals(cursor);
 
  609       bool equals(
const super_reverse_iterator& cursor)
 const 
  611         return equals(super_const_reverse_iterator(cursor));
 
  635       return super_const_iterator(this->begin(), this->end());
 
  646       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
  657       return super_const_iterator(this->end(), this->end());
 
  668       return super_const_reverse_iterator(this->rend(), this->rend());
 
  679       return super_iterator(this->begin(), this->end());
 
  690       return super_reverse_iterator(this->rbegin(), this->rend());
 
  701       return super_iterator(this->end(), this->end());
 
  712       return super_reverse_iterator(this->rend(), this->rend());
 
  724       return this->
get(key.first).
get(key.second);
 
  736       (*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; 
 
  812       static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
 
  826       static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
 
  840       static_cast<map_type&
>(*this).mul(value);
 
  853       static_cast<map_type&
>(*this).div(value);
 
  865     template<
class JFunction_t>
 
  889     template<
unsigned int N, 
unsigned int M>
 
  900     template<
class iterator_type, 
class ordinate_type>
 
  901     struct iterator_helper :
 
  902       public JEquals         < iterator_helper<iterator_type, ordinate_type> >,
 
  914       struct pointer_type :
 
  915         private JPair<const key_type, value_type>
 
  954                       iterator_type __end) :
 
  955         range(__begin, __end),
 
  967         return pointer_type(i->getX(), i->getY());
 
  988       bool equals(
const iterator_helper& cursor)
 const 
  990         return i == cursor.i;
 
 1001         return ++i != 
range.second;
 
 1033     class super_const_iterator;  
 
 1039     struct super_iterator :
 
 1040       public iterator_helper<iterator, ordinate_type&>
 
 1044       friend class super_const_iterator;
 
 1069     struct super_const_iterator :
 
 1070       public iterator_helper<const_iterator, const ordinate_type&>,
 
 1071       public JEquals<super_const_iterator, super_iterator>
 
 1090         this->
range = cursor.range;
 
 1101       bool equals(
const super_const_iterator& cursor)
 const 
 1103         return this->i == cursor.i;
 
 1113       bool equals(
const super_iterator& cursor)
 const 
 1115         return this->i == cursor.i;
 
 1132     class super_const_reverse_iterator;  
 
 1138     struct super_reverse_iterator :
 
 1139       public iterator_helper<reverse_iterator, ordinate_type&>
 
 1143       friend class super_const_reverse_iterator;
 
 1168     struct super_const_reverse_iterator :
 
 1169       public iterator_helper<const_reverse_iterator, const ordinate_type&>,
 
 1170       public JEquals<super_const_reverse_iterator, super_reverse_iterator>
 
 1189         this->
range = cursor.range;
 
 1200       bool equals(
const super_const_reverse_iterator& cursor)
 const 
 1202         return this->i == cursor.i;
 
 1212       bool equals(
const super_reverse_iterator& cursor)
 const 
 1214         return this->i == cursor.i;
 
 1238       return super_const_iterator(this->begin(), this->end());
 
 1249       return super_const_reverse_iterator(this->rbegin(), this->rend());
 
 1260       return super_const_iterator(this->end(), this->end());
 
 1271       return super_const_reverse_iterator(this->rend(), this->rend());
 
 1282       return super_iterator(this->begin(), this->end());
 
 1293       return super_reverse_iterator(this->rbegin(), this->rend());
 
 1304       return super_iterator(this->end(), this->end());
 
 1315       return super_reverse_iterator(this->rend(), this->rend());
 
 1327       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.