Jpp  19.1.0-rc.1
the software that should make you happy
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
JTOOLS::JCollection< JElement_t, JDistance_t > Class Template Reference

General purpose class for collection of elements, see: Collection of elements. . More...

#include <JCollection.hh>

Inheritance diagram for JTOOLS::JCollection< JElement_t, JDistance_t >:
std::vector< JElement_t > JTOOLS::JMappableCollection< JElement_t::abscissa_type, JElement_t::ordinate_type > JTOOLS::JAbstractCollection< JElement_t::abscissa_type > JMATH::JMath< JFirst_t, JSecond_t >

Classes

struct  JComparator
 Auxiliary class for ordering of objects in the collection by their abscissa values. More...
 

Public Types

typedef JElement_t::abscissa_type abscissa_type
 
typedef JElement_t::ordinate_type ordinate_type
 
typedef JElement_t value_type
 
typedef JDistance_t distance_type
 
typedef JCollection< JElement_t, JDistance_t > collection_type
 
typedef std::vector< value_typecontainer_type
 
typedef container_type::const_iterator const_iterator
 
typedef container_type::const_reverse_iterator const_reverse_iterator
 
typedef container_type::iterator iterator
 
typedef container_type::reverse_iterator reverse_iterator
 
typedef JCollectionElementTransformer< value_typetransformer_type
 
typedef std::pair< const_iterator, bool > pair_type
 
typedef JElement_t::abscissa_type key_type
 
typedef JElement_t::ordinate_type mapped_type
 

Public Member Functions

 JCollection ()
 Default constructor. More...
 
virtual void clear () override
 Clear. More...
 
virtual const ordinate_typeget (typename JClass< abscissa_type >::argument_type x) const override
 Get ordinate value. More...
 
virtual ordinate_typeget (typename JClass< abscissa_type >::argument_type x) override
 Get ordinate value. More...
 
virtual int getSize () const override
 Get number of elements. More...
 
virtual abscissa_type getX (int index) const override
 Get abscissa value. More...
 
virtual abscissa_type getXmin () const override
 Get minimal abscissa value. More...
 
virtual abscissa_type getXmax () const override
 Get maximal abscissa value. More...
 
const ordinate_typegetY (int index) const
 Get ordinate value. More...
 
ordinate_typegetY (int index)
 Get ordinate value. More...
 
void transform (const transformer_type &transformer)
 Transform collection. More...
 
void sort ()
 Sort elements. More...
 
const_iterator lower_bound (typename JClass< abscissa_type >::argument_type x) const
 Get first position of element i, where x >= i->getX(). More...
 
iterator lower_bound (typename JClass< abscissa_type >::argument_type x)
 Get first position of element i, where x >= i->getX(). More...
 
pair_type insert (const value_type &element)
 Insert element. More...
 
void configure (const JAbstractCollection< abscissa_type > &bounds)
 Configure collection. More...
 
void configure (const JAbstractCollection< abscissa_type > &bounds, typename JClass< ordinate_type >::argument_type value)
 Configure collection. More...
 
template<class JFunction1D_t >
void configure (const JAbstractCollection< abscissa_type > &bounds, const JFunction1D_t &function)
 Configure collection. More...
 
bool is_compatible (const JCollection &collection) const
 Test whether collections are compatible. More...
 
JCollectionnegate ()
 Negate collection. More...
 
JCollectionadd (const JCollection &collection)
 Add collection. More...
 
JCollectionsub (const JCollection &collection)
 Subtract collection. More...
 
JCollectionmul (const double value)
 Scale contents. More...
 
JCollectiondiv (const double value)
 Scale contents. More...
 
JCollectionadd (typename JClass< ordinate_type >::argument_type value)
 Add offset. More...
 
JCollectionsub (typename JClass< ordinate_type >::argument_type value)
 Subtract offset. More...
 
template<class JFunction1D_t >
JCollectionadd (const JFunction1D_t &function)
 Add function. More...
 
template<class JFunction1D_t >
JCollectionsub (const JFunction1D_t &function)
 Subtract function. More...
 
const JComparatorgetComparator () const
 Get comparator. More...
 
const mapped_typeoperator[] (typename JClass< key_type >::argument_type key) const
 Get mapped value. More...
 
mapped_typeoperator[] (typename JClass< key_type >::argument_type key)
 Get mapped value. More...
 
void put (typename JClass< key_type > ::argument_type key, typename JClass< mapped_type >::argument_type value)
 Put pair-wise element (key,value) into collection. More...
 
bool is_equal (const JAbstractCollection &collection) const
 Test whether abstract collections are equal. More...
 
JFirst_t & mul (const JSecond_t &object)
 Multiply with object. More...
 

Public Attributes

JDistance_t getDistance
 Function object for distance evaluation. More...
 

Protected Member Functions

void resize (typename container_type::size_type size)
 Resize collection. More...
 

Protected Attributes

JComparator compare
 Function object for comparison. More...
 

Private Member Functions

void erase ()
 
void push_back ()
 
void pop_back ()
 

Friends

JCollectionoperator+= (JCollection &collection, typename JClass< ordinate_type >::argument_type value)
 Add offset to collaction. More...
 
JCollectionoperator-= (JCollection &collection, typename JClass< ordinate_type >::argument_type value)
 Subtract offset from collaction. More...
 
template<class JFunction1D_t >
JCollectionoperator+= (JCollection &collection, const JFunction1D_t &function)
 Add function. More...
 
template<class JFunction1D_t >
JCollectionoperator-= (JCollection &collection, const JFunction1D_t &function)
 Subtract function. More...
 
JReaderoperator>> (JReader &in, JCollection &collection)
 Read collection from input. More...
 
JWriteroperator<< (JWriter &out, const JCollection &collection)
 Write collection to output. More...
 

Detailed Description

template<class JElement_t, class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
class JTOOLS::JCollection< JElement_t, JDistance_t >

General purpose class for collection of elements, see: Collection of elements. .

This class implements the JMappableCollection and JAbstractCollection interfaces.

The data type of the elements of the collection should have the following policy type definition and member methods.

     typedef <abscissa type>   abscissa_type;
     typedef <ordinate type>   ordinate_type;

     (constructor)(abscissa_type, ordinate_type);

     abscissa_type  getX() const;
     ordinate_type  getY() const;
     ordinate_type& getY();
  

The elements in a collection are sorted according to their abscissa values and the given distance operator. The distance operator constitues a binary method returning the distance between two abscissa values; The default distance operator is JDistance.

For the binary I/O of a collection of elements, the data structure of the elements should provide for an implementation of the following operators:

        JReader& operator>>(JReader& in);
        JWriter& operator<<(JWriter& out);
  

Definition at line 73 of file JCollection.hh.

Member Typedef Documentation

◆ abscissa_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JElement_t::abscissa_type JTOOLS::JCollection< JElement_t, JDistance_t >::abscissa_type

Definition at line 82 of file JCollection.hh.

◆ ordinate_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JElement_t::ordinate_type JTOOLS::JCollection< JElement_t, JDistance_t >::ordinate_type

Definition at line 83 of file JCollection.hh.

◆ value_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JElement_t JTOOLS::JCollection< JElement_t, JDistance_t >::value_type

Definition at line 84 of file JCollection.hh.

◆ distance_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JDistance_t JTOOLS::JCollection< JElement_t, JDistance_t >::distance_type

Definition at line 85 of file JCollection.hh.

◆ collection_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JCollection<JElement_t, JDistance_t> JTOOLS::JCollection< JElement_t, JDistance_t >::collection_type

Definition at line 87 of file JCollection.hh.

◆ container_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef std::vector<value_type> JTOOLS::JCollection< JElement_t, JDistance_t >::container_type

Definition at line 89 of file JCollection.hh.

◆ const_iterator

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef container_type::const_iterator JTOOLS::JCollection< JElement_t, JDistance_t >::const_iterator

Definition at line 91 of file JCollection.hh.

◆ const_reverse_iterator

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef container_type::const_reverse_iterator JTOOLS::JCollection< JElement_t, JDistance_t >::const_reverse_iterator

Definition at line 92 of file JCollection.hh.

◆ iterator

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef container_type::iterator JTOOLS::JCollection< JElement_t, JDistance_t >::iterator

Definition at line 93 of file JCollection.hh.

◆ reverse_iterator

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef container_type::reverse_iterator JTOOLS::JCollection< JElement_t, JDistance_t >::reverse_iterator

Definition at line 94 of file JCollection.hh.

◆ transformer_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef JCollectionElementTransformer<value_type> JTOOLS::JCollection< JElement_t, JDistance_t >::transformer_type

Definition at line 96 of file JCollection.hh.

◆ pair_type

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
typedef std::pair<const_iterator, bool> JTOOLS::JCollection< JElement_t, JDistance_t >::pair_type

Definition at line 97 of file JCollection.hh.

◆ key_type

typedef JElement_t::abscissa_type JTOOLS::JMappableCollection< JElement_t::abscissa_type , JElement_t::ordinate_type >::key_type
inherited

Definition at line 33 of file JMappableCollection.hh.

◆ mapped_type

typedef JElement_t::ordinate_type JTOOLS::JMappableCollection< JElement_t::abscissa_type , JElement_t::ordinate_type >::mapped_type
inherited

Definition at line 34 of file JMappableCollection.hh.

Constructor & Destructor Documentation

◆ JCollection()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JTOOLS::JCollection< JElement_t, JDistance_t >::JCollection ( )
inline

Default constructor.

Definition at line 143 of file JCollection.hh.

144  {}

Member Function Documentation

◆ clear()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual void JTOOLS::JCollection< JElement_t, JDistance_t >::clear ( )
inlineoverridevirtual

Clear.

Implements JTOOLS::JMappableCollection< JElement_t::abscissa_type, JElement_t::ordinate_type >.

Definition at line 150 of file JCollection.hh.

151  {
152  container_type::clear();
153  }

◆ get() [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual const ordinate_type& JTOOLS::JCollection< JElement_t, JDistance_t >::get ( typename JClass< abscissa_type >::argument_type  x) const
inlineoverridevirtual

Get ordinate value.

Parameters
xabscissa value
Returns
ordinate value

Implements JTOOLS::JMappableCollection< JElement_t::abscissa_type, JElement_t::ordinate_type >.

Definition at line 162 of file JCollection.hh.

163  {
164  const_iterator i = this->lower_bound(x);
165 
166  if (i == this->end() || this->getDistance(x, i->getX()) > distance_type::precision) {
167  THROW(JValueOutOfRange, "Invalid abscissa value " << x);
168  }
169 
170  return i->getY();
171  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:180
JDistance_t getDistance
Function object for distance evaluation.
Definition: JCollection.hh:773
container_type::const_iterator const_iterator
Definition: JCollection.hh:91
const_iterator lower_bound(typename JClass< abscissa_type >::argument_type x) const
Get first position of element i, where x >= i->getX().
Definition: JCollection.hh:292

◆ get() [2/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual ordinate_type& JTOOLS::JCollection< JElement_t, JDistance_t >::get ( typename JClass< abscissa_type >::argument_type  x)
inlineoverridevirtual

Get ordinate value.

Parameters
xabscissa value
Returns
ordinate value

Implements JTOOLS::JMappableCollection< JElement_t::abscissa_type, JElement_t::ordinate_type >.

Definition at line 180 of file JCollection.hh.

181  {
182  iterator i = this->lower_bound(x);
183 
184  if (i == this->end() || this->getDistance(x, i->getX()) > distance_type::precision) {
185  i = container_type::insert(i, value_type(x, JMATH::getZero<ordinate_type>()));
186  }
187 
188  return i->getY();
189  }
container_type::iterator iterator
Definition: JCollection.hh:93
JElement_t value_type
Definition: JCollection.hh:84

◆ getSize()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual int JTOOLS::JCollection< JElement_t, JDistance_t >::getSize ( ) const
inlineoverridevirtual

Get number of elements.

Returns
number of elements

Implements JTOOLS::JAbstractCollection< JElement_t::abscissa_type >.

Definition at line 197 of file JCollection.hh.

198  {
199  return (int) this->size();
200  }

◆ getX()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual abscissa_type JTOOLS::JCollection< JElement_t, JDistance_t >::getX ( int  index) const
inlineoverridevirtual

Get abscissa value.

Parameters
indexindex
Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JElement_t::abscissa_type >.

Definition at line 209 of file JCollection.hh.

210  {
211  return this->at(index).getX();
212  }

◆ getXmin()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual abscissa_type JTOOLS::JCollection< JElement_t, JDistance_t >::getXmin ( ) const
inlineoverridevirtual

Get minimal abscissa value.

Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JElement_t::abscissa_type >.

Definition at line 220 of file JCollection.hh.

221  {
222  return this->begin()->getX();
223  }

◆ getXmax()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
virtual abscissa_type JTOOLS::JCollection< JElement_t, JDistance_t >::getXmax ( ) const
inlineoverridevirtual

Get maximal abscissa value.

Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JElement_t::abscissa_type >.

Definition at line 231 of file JCollection.hh.

232  {
233  return this->rbegin()->getX();
234  }

◆ getY() [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
const ordinate_type& JTOOLS::JCollection< JElement_t, JDistance_t >::getY ( int  index) const
inline

Get ordinate value.

Parameters
indexindex
Returns
ordinate value

Definition at line 244 of file JCollection.hh.

245  {
246  return this->at(index).getY();
247  }

◆ getY() [2/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
ordinate_type& JTOOLS::JCollection< JElement_t, JDistance_t >::getY ( int  index)
inline

Get ordinate value.

Parameters
indexindex
Returns
ordinate value

Definition at line 256 of file JCollection.hh.

257  {
258  return this->at(index).getY();
259  }

◆ transform()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::transform ( const transformer_type transformer)
inline

Transform collection.

Parameters
transformerelement transformer

Definition at line 267 of file JCollection.hh.

268  {
269  for (iterator i = this->begin(); i != this->end(); ++i) {
270  *i = transformer(*i);
271  }
272 
273  sort();
274  }
void sort()
Sort elements.
Definition: JCollection.hh:280

◆ sort()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::sort ( )
inline

Sort elements.

Definition at line 280 of file JCollection.hh.

281  {
282  std::sort(this->begin(), this->end(), compare);
283  }
JComparator compare
Function object for comparison.
Definition: JCollection.hh:780

◆ lower_bound() [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
const_iterator JTOOLS::JCollection< JElement_t, JDistance_t >::lower_bound ( typename JClass< abscissa_type >::argument_type  x) const
inline

Get first position of element i, where x >= i->getX().

Parameters
xabscissa value
Returns
position of corresponding element

Definition at line 292 of file JCollection.hh.

293  {
294  return std::lower_bound(this->begin(), this->end(), x, compare);
295  }

◆ lower_bound() [2/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
iterator JTOOLS::JCollection< JElement_t, JDistance_t >::lower_bound ( typename JClass< abscissa_type >::argument_type  x)
inline

Get first position of element i, where x >= i->getX().

Parameters
xabscissa value
Returns
position of corresponding element

Definition at line 304 of file JCollection.hh.

305  {
306  return std::lower_bound(this->begin(), this->end(), x, compare);
307  }

◆ insert()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
pair_type JTOOLS::JCollection< JElement_t, JDistance_t >::insert ( const value_type element)
inline

Insert element.

Parameters
elementelement
Returns
(iterator, status), where status is true if inserted; else false

Definition at line 316 of file JCollection.hh.

317  {
318  iterator i = this->lower_bound(element.getX());
319 
320  if (i == this->end() || this->getDistance(element.getX(), i->getX()) > 0.0)
321  return pair_type(container_type::insert(i, element), true);
322  else
323  return pair_type(this->end(), false);
324  }
std::pair< const_iterator, bool > pair_type
Definition: JCollection.hh:97

◆ configure() [1/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::configure ( const JAbstractCollection< abscissa_type > &  bounds)
inline

Configure collection.

Parameters
boundsabscissa values

Definition at line 332 of file JCollection.hh.

333  {
334  configure(bounds, JMATH::getZero<ordinate_type>());
335  }
void configure(const JAbstractCollection< abscissa_type > &bounds)
Configure collection.
Definition: JCollection.hh:332

◆ configure() [2/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::configure ( const JAbstractCollection< abscissa_type > &  bounds,
typename JClass< ordinate_type >::argument_type  value 
)
inline

Configure collection.

Parameters
boundsabscissa values
valueordinate value

Definition at line 344 of file JCollection.hh.

346  {
347  this->resize(bounds.getSize());
348 
349  for (iterator i = this->begin(); i != this->end(); ++i) {
350 
351  const abscissa_type x = bounds.getX(std::distance(this->begin(),i));
352 
353  *i = value_type(x,value);
354  }
355  }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
void resize(typename container_type::size_type size)
Resize collection.
Definition: JCollection.hh:788
JElement_t::abscissa_type abscissa_type
Definition: JCollection.hh:82
virtual int getSize() const =0
Get number of elements.
virtual abscissa_type getX(int index) const =0
Get abscissa value.

◆ configure() [3/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
template<class JFunction1D_t >
void JTOOLS::JCollection< JElement_t, JDistance_t >::configure ( const JAbstractCollection< abscissa_type > &  bounds,
const JFunction1D_t &  function 
)
inline

Configure collection.

Parameters
boundsabscissa values
functionfunction

Definition at line 365 of file JCollection.hh.

367  {
368  using namespace JLANG;
369 
370  collection_type* out = (is_identical(*this, function) ? new collection_type() : this);
371 
372  for (int i = 0; i != bounds.getSize(); ++i) {
373 
374  const abscissa_type x = bounds.getX(i);
375 
376  out->put(x, function(x));
377  }
378 
379  if (is_identical(*this, function)) {
380 
381  this->swap(*out);
382 
383  delete out;
384  }
385  }
JCollection< JElement_t, JDistance_t > collection_type
Definition: JCollection.hh:87
Auxiliary classes and methods for language specific functionality.
bool is_identical(JFirst_t &first, JSecond_t &second)
Check if two objects are indentical.
Definition: JLangToolkit.hh:46

◆ is_compatible()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
bool JTOOLS::JCollection< JElement_t, JDistance_t >::is_compatible ( const JCollection< JElement_t, JDistance_t > &  collection) const
inline

Test whether collections are compatible.

Parameters
collectioncollection
Returns
true if collections are compatible; else false

Definition at line 394 of file JCollection.hh.

395  {
396  if (this->empty() || collection.empty()) {
397 
398  return true;
399 
400  } else {
401 
402  const double precision = JDistance<abscissa_type>::precision;
403 
404  const_iterator p = this->begin();
405  const_iterator q = collection.begin();
406 
407  if (getDistance(p->getX(), q->getX()) > precision) {
408 
409  do {
410  ++p;
411  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
412 
413  } else if (getDistance(q->getX(), p->getX()) > precision) {
414 
415  do {
416  ++q;
417  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
418  }
419 
420  for ( ; p != this->end() && q != collection.end(); ++p, ++q) {
421  if (fabs(getDistance(p->getX(), q->getX())) > precision) {
422  return false;
423  }
424  }
425 
426  return true;
427  }
428  }
Template class for distance evaluation.
Definition: JDistance.hh:24

◆ negate()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::negate ( )
inline

Negate collection.

Returns
this collection

Definition at line 436 of file JCollection.hh.

437  {
438  for (iterator i = this->begin(); i != this->end(); ++i) {
439  i->getY() = -i->getY();
440  }
441 
442  return *this;
443  }

◆ add() [1/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::add ( const JCollection< JElement_t, JDistance_t > &  collection)
inline

Add collection.

Parameters
collectioncollection
Returns
this collection

Definition at line 452 of file JCollection.hh.

453  {
454  if (!collection.empty()) {
455 
456  if (this->empty()) {
457 
458  for (const_iterator i = collection.begin(); i != collection.end(); ++i) {
459  this->put(i->getX(), +i->getY());
460  }
461 
462  } else if (this->is_compatible(collection)) {
463 
464  const double precision = JDistance<abscissa_type>::precision;
465 
466  iterator p = this->begin();
467  const_iterator q = collection.begin();
468 
469  if (getDistance(p->getX(), q->getX()) > precision) {
470 
471  do {
472  ++p;
473  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
474 
475  } else if (getDistance(q->getX(), p->getX()) > precision) {
476 
477  do {
478  ++q;
479  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
480  }
481 
482  const_iterator i = q;
483 
484  for ( ; p != this->end() && i != collection.end(); ++p, ++i) {
485  p->getY() += i->getY();
486  }
487 
488  for ( ; i != collection.end(); ++i) {
489  this->put(i->getX(), +i->getY());
490  }
491 
492  for (i = collection.begin(); i != q; ++i) {
493  this->put(i->getX(), +i->getY());
494  }
495  }
496  }
497 
498  return *this;
499  }
bool is_compatible(const JCollection &collection) const
Test whether collections are compatible.
Definition: JCollection.hh:394
void put(typename JClass< key_type > ::argument_type key, typename JClass< mapped_type >::argument_type value)
Put pair-wise element (key,value) into collection.

◆ sub() [1/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::sub ( const JCollection< JElement_t, JDistance_t > &  collection)
inline

Subtract collection.

Parameters
collectioncollection
Returns
this collection

Definition at line 508 of file JCollection.hh.

509  {
510  if (!collection.empty()) {
511 
512  if (this->empty()) {
513 
514  for (const_iterator i = collection.begin(); i != collection.end(); ++i) {
515  this->put(i->getX(), -i->getY());
516  }
517 
518  } else if (this->is_compatible(collection)) {
519 
520  const double precision = JDistance<abscissa_type>::precision;
521 
522  iterator p = this->begin();
523  const_iterator q = collection.begin();
524 
525  if (getDistance(p->getX(), q->getX()) > precision) {
526 
527  do {
528  ++p;
529  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
530 
531  } else if (getDistance(q->getX(), p->getX()) > precision) {
532 
533  do {
534  ++q;
535  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
536  }
537 
538  const_iterator i = q;
539 
540  for ( ; p != this->end() && i != collection.end(); ++p, ++i) {
541  p->getY() -= i->getY();
542  }
543 
544  for ( ; i != collection.end(); ++i) {
545  this->put(i->getX(), -i->getY());
546  }
547 
548  for (i = collection.begin(); i != q; ++i) {
549  this->put(i->getX(), -i->getY());
550  }
551 
552  } else {
553 
554  THROW(JException, "JCollection::add() collections incompatible.");
555  }
556  }
557 
558  return *this;
559  }
General exception.
Definition: JException.hh:24

◆ mul() [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::mul ( const double  value)
inline

Scale contents.

Parameters
valuemultiplication factor
Returns
this collection

Definition at line 568 of file JCollection.hh.

569  {
570  for (iterator i = this->begin(); i != this->end(); ++i) {
571  i->getY() *= value;
572  }
573 
574  return *this;
575  }

◆ div()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::div ( const double  value)
inline

Scale contents.

Parameters
valuedivision factor
Returns
this collection

Definition at line 584 of file JCollection.hh.

585  {
586  for (iterator i = this->begin(); i != this->end(); ++i) {
587  i->getY() /= value;
588  }
589 
590  return *this;
591  }

◆ add() [2/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::add ( typename JClass< ordinate_type >::argument_type  value)
inline

Add offset.

Parameters
valueoffset
Returns
this collection

Definition at line 600 of file JCollection.hh.

601  {
602  for (iterator i = this->begin(); i != this->end(); ++i) {
603  i->getY() += value;
604  }
605 
606  return *this;
607  }

◆ sub() [2/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::sub ( typename JClass< ordinate_type >::argument_type  value)
inline

Subtract offset.

Parameters
valueoffset
Returns
this collection

Definition at line 616 of file JCollection.hh.

617  {
618  for (iterator i = this->begin(); i != this->end(); ++i) {
619  i->getY() -= value;
620  }
621 
622  return *this;
623  }

◆ add() [3/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
template<class JFunction1D_t >
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::add ( const JFunction1D_t &  function)
inline

Add function.

Parameters
functionfunction
Returns
this collection

Definition at line 633 of file JCollection.hh.

634  {
635  for (iterator i = this->begin(); i != this->end(); ++i) {
636  i->getY() += function(i->getX());
637  }
638 
639  return *this;
640  }

◆ sub() [3/3]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
template<class JFunction1D_t >
JCollection& JTOOLS::JCollection< JElement_t, JDistance_t >::sub ( const JFunction1D_t &  function)
inline

Subtract function.

Parameters
functionfunction
Returns
this collection

Definition at line 650 of file JCollection.hh.

651  {
652  for (iterator i = this->begin(); i != this->end(); ++i) {
653  i->getY() -= function(i->getX());
654  }
655 
656  return *this;
657  }

◆ getComparator()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
const JComparator& JTOOLS::JCollection< JElement_t, JDistance_t >::getComparator ( ) const
inline

Get comparator.

Returns
comparator

Definition at line 764 of file JCollection.hh.

765  {
766  return compare;
767  }

◆ resize()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::resize ( typename container_type::size_type  size)
inlineprotected

Resize collection.

Parameters
sizesize

Definition at line 788 of file JCollection.hh.

789  {
790  container_type::resize(size);
791  }

◆ erase()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::erase ( )
private

◆ push_back()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::push_back ( )
private

◆ pop_back()

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
void JTOOLS::JCollection< JElement_t, JDistance_t >::pop_back ( )
private

◆ operator[]() [1/2]

const mapped_type& JTOOLS::JMappableCollection< JElement_t::abscissa_type , JElement_t::ordinate_type >::operator[] ( typename JClass< key_type >::argument_type  key) const
inlineinherited

Get mapped value.

Parameters
keykey
Returns
value

Definition at line 73 of file JMappableCollection.hh.

74  {
75  return get(key);
76  }

◆ operator[]() [2/2]

mapped_type& JTOOLS::JMappableCollection< JElement_t::abscissa_type , JElement_t::ordinate_type >::operator[] ( typename JClass< key_type >::argument_type  key)
inlineinherited

Get mapped value.

Parameters
keykey
Returns
value

Definition at line 85 of file JMappableCollection.hh.

86  {
87  return get(key);
88  }

◆ put()

void JTOOLS::JMappableCollection< JElement_t::abscissa_type , JElement_t::ordinate_type >::put ( typename JClass< key_type > ::argument_type  key,
typename JClass< mapped_type >::argument_type  value 
)
inlineinherited

Put pair-wise element (key,value) into collection.

Parameters
keykey
valuevalue

Definition at line 97 of file JMappableCollection.hh.

99  {
100  get(key) = value;
101  }

◆ is_equal()

bool JTOOLS::JAbstractCollection< JElement_t::abscissa_type >::is_equal ( const JAbstractCollection< JElement_t::abscissa_type > &  collection) const
inlineinherited

Test whether abstract collections are equal.

Parameters
collectionabstract collection
Returns
true if collections are equals; else false

Definition at line 72 of file JAbstractCollection.hh.

73  {
74  if (this->getSize() == collection.getSize()) {
75 
76  for (int i = 0; i != this->getSize(); ++i) {
77 
78  if (this->getX(i) != collection.getX(i)) {
79  return false;
80  }
81  }
82 
83  return true;
84  }
85 
86  return false;
87  }

◆ mul() [2/2]

template<class JFirst_t , class JSecond_t >
JFirst_t& JMATH::JMath< JFirst_t, JSecond_t >::mul ( const JSecond_t &  object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 354 of file JMath.hh.

355  {
356  return static_cast<JFirst_t&>(*this) = JFirst_t().mul(static_cast<const JFirst_t&>(*this), object);
357  }

Friends And Related Function Documentation

◆ operator+= [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& operator+= ( JCollection< JElement_t, JDistance_t > &  collection,
typename JClass< ordinate_type >::argument_type  value 
)
friend

Add offset to collaction.

Parameters
collectioncollection
valueoffset
Returns
collection

Definition at line 667 of file JCollection.hh.

668  {
669  return collection.add(value);
670  }
JCollection & add(const JCollection &collection)
Add collection.
Definition: JCollection.hh:452

◆ operator-= [1/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JCollection& operator-= ( JCollection< JElement_t, JDistance_t > &  collection,
typename JClass< ordinate_type >::argument_type  value 
)
friend

Subtract offset from collaction.

Parameters
collectioncollection
valueoffset
Returns
collection

Definition at line 680 of file JCollection.hh.

681  {
682  return collection.sub(value);
683  }
JCollection & sub(const JCollection &collection)
Subtract collection.
Definition: JCollection.hh:508

◆ operator+= [2/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
template<class JFunction1D_t >
JCollection& operator+= ( JCollection< JElement_t, JDistance_t > &  collection,
const JFunction1D_t &  function 
)
friend

Add function.

Parameters
collectioncollection
functionfunction
Returns
this collection

Definition at line 694 of file JCollection.hh.

695  {
696  return collection.add(function);
697  }

◆ operator-= [2/2]

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
template<class JFunction1D_t >
JCollection& operator-= ( JCollection< JElement_t, JDistance_t > &  collection,
const JFunction1D_t &  function 
)
friend

Subtract function.

Parameters
collectioncollection
functionfunction
Returns
this collection

Definition at line 708 of file JCollection.hh.

709  {
710  return collection.sub(function);
711  }

◆ operator>>

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JReader& operator>> ( JReader in,
JCollection< JElement_t, JDistance_t > &  collection 
)
friend

Read collection from input.

Parameters
inreader
collectioncollection
Returns
reader

Definition at line 721 of file JCollection.hh.

722  {
723  int n;
724 
725  if (in >> n) {
726 
727  collection.resize(n);
728 
729  for (typename JCollection::iterator i = collection.begin(); i != collection.end(); ++i) {
730  in >> *i;
731  }
732  }
733 
734  return in;
735  }
const int n
Definition: JPolint.hh:786

◆ operator<<

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JWriter& operator<< ( JWriter out,
const JCollection< JElement_t, JDistance_t > &  collection 
)
friend

Write collection to output.

Parameters
outwriter
collectioncollection
Returns
writer

Definition at line 745 of file JCollection.hh.

746  {
747  const int n = collection.size();
748 
749  out << n;
750 
751  for (typename JCollection::const_iterator i = collection.begin(); i != collection.end(); ++i) {
752  out << *i;
753  }
754 
755  return out;
756  }

Member Data Documentation

◆ getDistance

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JDistance_t JTOOLS::JCollection< JElement_t, JDistance_t >::getDistance

Function object for distance evaluation.

Definition at line 773 of file JCollection.hh.

◆ compare

template<class JElement_t , class JDistance_t = JDistance<typename JElement_t::abscissa_type>>
JComparator JTOOLS::JCollection< JElement_t, JDistance_t >::compare
protected

Function object for comparison.

Definition at line 780 of file JCollection.hh.


The documentation for this class was generated from the following file: