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.