1 #ifndef __JTOOLS__JMULTIMAP__
2 #define __JTOOLS__JMULTIMAP__
24 namespace JPP {
using namespace JTOOLS; }
42 template<
class JAbscissa_t,
52 template<
class JAbscissa_t,
54 template<
class,
class,
class>
class JHead_t,
58 public JHead_t<JAbscissa_t, JMultiMap<JAbscissa_t, JOrdinate_t, JTail_t, JDistance_t>, JDistance_t>,
59 public JMATH::JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JTail_t>, JDistance_t> >
65 typedef JHead_t<JAbscissa_t,
81 using map_type::insert;
101 static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
115 static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
129 static_cast<map_type&
>(*this).mul(value);
142 static_cast<map_type&
>(*this).div(value);
154 template<
class JFunction_t>
159 for (
iterator i = this->begin(); i != this->end(); ++i) {
160 i->getY().for_each(
function);
182 template<
unsigned int N,
unsigned int M>
187 for (
iterator i = this->begin(); i != this->end(); ++i) {
193 class super_const_iterator;
199 class super_iterator :
210 friend class super_const_iterator;
249 virtual bool equals(
const super_iterator& cursor)
const
251 return i == cursor.i && (i == range.second || second.equals(cursor.second));
262 if (!second.increment()) {
264 while (++i != range.second) {
266 second = i->getY().super_begin();
268 if (second != i->getY().super_end()) {
274 return i != range.second;
296 return second.getValue();
309 range(__begin, __end)
311 for (i = range.first; i != range.second; ++i) {
313 second = i->getY().super_begin();
315 if (second != i->getY().super_end()) {
324 typename mapped_type::super_iterator
second;
331 class super_const_iterator :
358 range (cursor.range),
360 second(cursor.second)
392 virtual bool equals(
const super_const_iterator& cursor)
const
394 return i == cursor.i && (i == range.second || second.equals(cursor.second));
405 if (!second.increment()) {
407 while (++i != range.second) {
409 second = i->getY().super_begin();
411 if (second != i->getY().super_end()) {
417 return i != range.second;
439 return second.getValue();
452 range(__begin, __end)
454 for (i = range.first; i != range.second; ++i) {
456 second = i->getY().super_begin();
458 if (second != i->getY().super_end()) {
467 typename mapped_type::super_const_iterator
second;
478 return super_const_iterator(this->begin(), this->end());
489 return super_const_iterator(this->end(), this->end());
500 return super_iterator(this->begin(), this->end());
511 return super_iterator(this->end(), this->end());
523 return this->
get(key.first).
get(key.second);
535 (*this)[key.first].insert(key.second, value);
576 template<
class JAbscissa_t,
578 template<
class,
class,
class>
class JHead_t,
581 public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
582 public JMATH::JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
586 enum { NUMBER_OF_DIMENSIONS = 1 };
588 typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>
map_type;
603 using map_type::insert;
623 static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
637 static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
651 static_cast<map_type&
>(*this).mul(value);
664 static_cast<map_type&
>(*this).div(value);
676 template<
class JFunction_t>
700 template<
unsigned int N,
unsigned int M>
707 class super_const_iterator;
713 class super_iterator :
724 friend class super_const_iterator;
763 virtual bool equals(
const super_iterator& cursor)
const
765 return i == cursor.i;
776 return ++i != range.second;
810 range(__begin, __end),
823 class super_const_iterator :
883 virtual bool equals(
const super_const_iterator& cursor)
const
885 return i == cursor.i;
896 return ++i != range.second;
930 range(__begin, __end),
947 return super_const_iterator(this->begin(), this->end());
958 return super_const_iterator(this->end(), this->end());
969 return super_iterator(this->begin(), this->end());
980 return super_iterator(this->end(), this->end());
992 return get(key.first);
Template interface for method bool increment().
Auxiliary base class for aritmetic operations of derived class types.
The template JSinglePointer class can be used to hold a pointer to an object.
T get(const JHead &head)
Get object from header.
Template definition of auxiliary base class for comparison of data structures.
Auxiliary class for no type definition.
Base class for data structures with artithmetic capabilities.