1 #ifndef __JTOOLS__JMULTIMAP__
2 #define __JTOOLS__JMULTIMAP__
24 namespace JPP {
using namespace JTOOLS; }
47 template<
class JAbscissa_t,
57 template<
class JAbscissa_t,
59 template<
class,
class,
class>
class JHead_t,
63 public JHead_t<JAbscissa_t, JMultiMap<JAbscissa_t, JOrdinate_t, JTail_t, JDistance_t>, JDistance_t>,
64 public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JTail_t>, JDistance_t> >
70 typedef JHead_t<JAbscissa_t,
86 using map_type::insert;
106 static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
120 static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
134 static_cast<map_type&
>(*this).mul(value);
147 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) {
198 class super_const_iterator;
204 class super_iterator :
205 public JEquals <super_iterator>,
210 friend class super_const_iterator;
256 virtual bool equals(
const super_iterator& cursor)
const
258 return i == cursor.i && (i ==
range.second || second.equals(cursor.second));
269 if (!second.increment()) {
271 while (++i !=
range.second) {
273 second = i->getY().super_begin();
275 if (second != i->getY().super_end()) {
281 return i !=
range.second;
303 return second.getValue();
316 range(__begin, __end)
318 for (i =
range.first; i !=
range.second; ++i) {
320 second = i->getY().super_begin();
322 if (second != i->getY().super_end()) {
331 typename mapped_type::super_iterator
second;
338 class super_const_iterator :
339 public JEquals <super_const_iterator>,
370 second(cursor.second)
402 virtual bool equals(
const super_const_iterator& cursor)
const
404 return i == cursor.i && (i ==
range.second || second.equals(cursor.second));
415 if (!second.increment()) {
417 while (++i !=
range.second) {
419 second = i->getY().super_begin();
421 if (second != i->getY().super_end()) {
427 return i !=
range.second;
449 return second.getValue();
462 range(__begin, __end)
464 for (i =
range.first; i !=
range.second; ++i) {
466 second = i->getY().super_begin();
468 if (second != i->getY().super_end()) {
477 typename mapped_type::super_const_iterator
second;
481 class super_const_reverse_iterator;
487 class super_reverse_iterator :
488 public JEquals <super_reverse_iterator>,
493 friend class super_const_reverse_iterator;
540 virtual bool equals(
const super_reverse_iterator& cursor)
const
542 return i == cursor.i && (i ==
range.second || second.equals(cursor.second));
553 if (!second.increment()) {
555 while (++i !=
range.second) {
557 second = i->getY().super_rbegin();
559 if (!second.equals(i->getY().super_rend())) {
565 return i !=
range.second;
587 return second.getValue();
600 range(__begin, __end)
602 for (i =
range.first; i !=
range.second; ++i) {
604 second = i->getY().super_rbegin();
606 if (!second.equals(i->getY().super_rend())) {
615 typename mapped_type::super_reverse_iterator
second;
622 class super_const_reverse_iterator :
623 public JEquals <super_const_reverse_iterator>,
654 second(cursor.second)
686 virtual bool equals(
const super_const_reverse_iterator& cursor)
const
688 return i == cursor.i && (i ==
range.second || second.equals(cursor.second));
699 if (!second.increment()) {
701 while (++i !=
range.second) {
703 second = i->getY().super_rbegin();
705 if (second != i->getY().super_rend()) {
711 return i !=
range.second;
733 return second.getValue();
746 range(__begin, __end)
748 for (i =
range.first; i !=
range.second; ++i) {
750 second = i->getY().super_rbegin();
752 if (second != i->getY().super_rend()) {
761 typename mapped_type::super_const_reverse_iterator
second;
772 return super_const_iterator(this->begin(), this->end());
783 return super_const_reverse_iterator(this->rbegin(), this->rend());
794 return super_const_iterator(this->end(), this->end());
805 return super_const_reverse_iterator(this->rend(), this->rend());
816 return super_iterator(this->begin(), this->end());
827 return super_reverse_iterator(this->rbegin(), this->rend());
838 return super_iterator(this->end(), this->end());
849 return super_reverse_iterator(this->rend(), this->rend());
861 return this->
get(key.first).
get(key.second);
873 (*this)[key.first].insert(key.second, value);
914 template<
class JAbscissa_t,
916 template<
class,
class,
class>
class JHead_t,
919 public JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>,
920 public JMath< JMultiMap<JAbscissa_t, JOrdinate_t, JMapList<JHead_t, JLANG::JNullType>, JDistance_t> >
924 enum { NUMBER_OF_DIMENSIONS = 1 };
926 typedef JHead_t<JAbscissa_t, JOrdinate_t, JDistance_t>
map_type;
941 using map_type::insert;
961 static_cast<map_type&
>(*this).add(static_cast<const map_type&>(map));
975 static_cast<map_type&
>(*this).sub(static_cast<const map_type&>(map));
989 static_cast<map_type&
>(*this).mul(value);
1002 static_cast<map_type&
>(*this).div(value);
1014 template<
class JFunction_t>
1038 template<
unsigned int N,
unsigned int M>
1045 class super_const_iterator;
1051 class super_iterator :
1052 public JEquals <super_iterator>,
1057 friend class super_const_iterator;
1104 virtual bool equals(
const super_iterator& cursor)
const
1106 return i == cursor.i;
1117 return ++i !=
range.second;
1151 range(__begin, __end),
1164 class super_const_iterator :
1165 public JEquals <super_const_iterator>,
1227 virtual bool equals(
const super_const_iterator& cursor)
const
1229 return i == cursor.i;
1240 return ++i !=
range.second;
1274 range(__begin, __end),
1284 class super_const_reverse_iterator;
1290 class super_reverse_iterator :
1291 public JEquals <super_iterator>,
1296 friend class super_const_reverse_iterator;
1343 virtual bool equals(
const super_reverse_iterator& cursor)
const
1345 return i == cursor.i;
1356 return ++i !=
range.second;
1390 range(__begin, __end),
1403 class super_const_reverse_iterator :
1404 public JEquals <super_const_reverse_iterator>,
1466 virtual bool equals(
const super_const_reverse_iterator& cursor)
const
1468 return i == cursor.i;
1479 return ++i !=
range.second;
1513 range(__begin, __end),
1530 return super_const_iterator(this->begin(), this->end());
1541 return super_const_reverse_iterator(this->rbegin(), this->rend());
1552 return super_const_iterator(this->end(), this->end());
1563 return super_const_reverse_iterator(this->rend(), this->rend());
1574 return super_iterator(this->begin(), this->end());
1585 return super_reverse_iterator(this->rbegin(), this->rend());
1596 return super_iterator(this->end(), this->end());
1607 return super_reverse_iterator(this->rend(), this->rend());
1619 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.
The template JSinglePointer class can be used to hold a pointer to an object.
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.