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 (*this)[key.first].insert(key.second, value);
754 template<
class JAbscissa_t,
756 template<
class,
class,
class>
class JHead_t,
759 public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
760 public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
764 enum { NUMBER_OF_DIMENSIONS = 1 };
766 typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>
map_type;
780 using map_type::insert;
781 using map_type::configure;
828 static_cast<map_type&
>(*this).mul(value);
841 static_cast<map_type&
>(*this).div(value);
852 template<
class JFunction_t>
876 template<
unsigned int N,
unsigned int M>
887 template<
class iterator_type,
class ordinate_type>
889 public JEquals < iterator_helper<iterator_type, ordinate_type> >,
894 typedef JMultiKey <NUMBER_OF_DIMENSIONS, const abscissa_type>
multikey_type;
902 private JPair<const key_type, value_type>
941 iterator_type __end) :
942 range(__begin, __end),
977 return i == cursor.
i;
988 return ++i != range.second;
1058 public JEquals<super_const_iterator, super_iterator>
1077 this->range = cursor.
range;
1090 return this->i == cursor.
i;
1102 return this->i == cursor.
i;
1119 class super_const_reverse_iterator;
1157 public JEquals<super_const_reverse_iterator, super_reverse_iterator>
1176 this->range = cursor.
range;
1189 return this->i == cursor.
i;
1201 return this->i == cursor.
i;
1314 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.