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);
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;
792 using map_type::configure;
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>
900 public JEquals < iterator_helper<iterator_type, ordinate_type> >,
905 typedef JMultiKey <NUMBER_OF_DIMENSIONS, const abscissa_type>
multikey_type;
913 private JPair<const key_type, value_type>
952 iterator_type __end) :
953 range(__begin, __end),
988 return i == cursor.
i;
999 return ++i != range.second;
1069 public JEquals<super_const_iterator, super_iterator>
1088 this->range = cursor.
range;
1101 return this->i == cursor.
i;
1113 return this->i == cursor.
i;
1130 class super_const_reverse_iterator;
1168 public JEquals<super_const_reverse_iterator, super_reverse_iterator>
1187 this->range = cursor.
range;
1200 return this->i == cursor.
i;
1212 return this->i == cursor.
i;
1325 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.