LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar::sparse_vector< T >::iterator Class Reference

Iterator to the sparse vector values. More...

#include "sparse_vector.h"

Inheritance diagram for lar::sparse_vector< T >::iterator:
lar::sparse_vector< T >::const_iterator

Public Types

typedef const_iterator::reference reference
 
typedef const_iterator::const_reference const_reference
 
typedef const_iterator::special special
 
typedef std::forward_iterator_tag iterator_category
 
typedef container_t::value_type value_type
 
typedef container_t::difference_type difference_type
 
typedef container_t::pointer pointer
 

Public Member Functions

 iterator ()
 Default constructor, does not iterate anywhere. More...
 
 iterator (container_t &c, size_type offset=0)
 Constructor from a container and an offset. More...
 
 iterator (const container_t &c, const typename special::begin _)
 Special constructor: initializes at the beginning of the container. More...
 
 iterator (const container_t &c, const typename special::end _)
 Special constructor: initializes at the end of the container. More...
 
reference operator[] (size_type offset) const
 Random access. More...
 
reference operator* () const
 Dereferenciation operator (can't write non-empty elements!) More...
 
difference_type operator- (const const_iterator &iter) const
 Distance operator. More...
 
range_const_iterator get_current_range () const
 Returns the current range internal value; use it at your own risk!! More...
 
iteratoroperator++ ()
 Increment and decrement operators. More...
 
iterator operator++ (int _)
 Increment and decrement operators. More...
 
iteratoroperator+= (difference_type delta)
 Increment and decrement operators. More...
 
iteratoroperator-= (difference_type delta)
 Increment and decrement operators. More...
 
iterator operator+ (difference_type delta) const
 Increment and decrement operators. More...
 
iterator operator- (difference_type delta) const
 Increment and decrement operators. More...
 
bool operator== (const const_iterator &as) const
 Iterator comparisons. More...
 
bool operator!= (const const_iterator &as) const
 Iterator comparisons. More...
 
bool operator< (const const_iterator &than) const
 Iterator comparisons. More...
 
bool operator> (const const_iterator &than) const
 Iterator comparisons. More...
 
bool operator<= (const const_iterator &than) const
 Iterator comparisons. More...
 
bool operator>= (const const_iterator &than) const
 Iterator comparisons. More...
 

Protected Types

typedef container_t::size_type size_type
 
typedef container_t::range_list_t::const_iterator ranges_const_iterator
 

Protected Member Functions

 iterator (const_iterator from)
 
void refresh_state ()
 Reassigns the internal state according to the index. More...
 

Protected Attributes

const container_tcont
 pointer to the container More...
 
size_type index
 pointer to the current value, as absolute index More...
 
ranges_const_iterator currentRange
 pointer to the current (or next) range More...
 

Private Types

typedef const_iterator::container_t container_t
 

Detailed Description

template<typename T>
class lar::sparse_vector< T >::iterator

Iterator to the sparse vector values.

This iterator respects the traits of an immutable forward iterator, EXCEPT that the iterator can be non-dereferenciable even when it's a "past the end" iterator. That is due to the fact that currently dereferencing (and assigning) to a cell which is not in a range already is not supported yet (it can be done with some complicate mechanism).

Definition at line 1621 of file sparse_vector.h.

Member Typedef Documentation

template<typename T>
typedef const_iterator::const_reference lar::sparse_vector< T >::iterator::const_reference

Definition at line 1627 of file sparse_vector.h.

template<typename T>
typedef const_iterator::container_t lar::sparse_vector< T >::iterator::container_t
private

Definition at line 1622 of file sparse_vector.h.

Definition at line 1484 of file sparse_vector.h.

template<typename T>
typedef std::forward_iterator_tag lar::sparse_vector< T >::const_iterator::iterator_category
inherited

Definition at line 1474 of file sparse_vector.h.

template<typename T>
typedef container_t::pointer lar::sparse_vector< T >::const_iterator::pointer
inherited

Definition at line 1485 of file sparse_vector.h.

template<typename T>
typedef container_t::range_list_t::const_iterator lar::sparse_vector< T >::const_iterator::ranges_const_iterator
protectedinherited

Definition at line 1469 of file sparse_vector.h.

Definition at line 1626 of file sparse_vector.h.

template<typename T>
typedef container_t::size_type lar::sparse_vector< T >::const_iterator::size_type
protectedinherited

Definition at line 1468 of file sparse_vector.h.

template<typename T>
typedef const_iterator::special lar::sparse_vector< T >::iterator::special

Definition at line 1628 of file sparse_vector.h.

template<typename T>
typedef container_t::value_type lar::sparse_vector< T >::const_iterator::value_type
inherited

Definition at line 1483 of file sparse_vector.h.

Constructor & Destructor Documentation

template<typename T>
lar::sparse_vector< T >::iterator::iterator ( )
inline

Default constructor, does not iterate anywhere.

Definition at line 1631 of file sparse_vector.h.

1631 : const_iterator() {}
const_iterator()
Default constructor, does not iterate anywhere.
template<typename T>
lar::sparse_vector< T >::iterator::iterator ( container_t c,
size_type  offset = 0 
)
inline

Constructor from a container and an offset.

Definition at line 1634 of file sparse_vector.h.

1634 : const_iterator(c, offset) {}
const_iterator()
Default constructor, does not iterate anywhere.
template<typename T>
lar::sparse_vector< T >::iterator::iterator ( const container_t c,
const typename special::begin  _ 
)
inline

Special constructor: initializes at the beginning of the container.

Definition at line 1637 of file sparse_vector.h.

1637 : const_iterator(c, _) {}
const_iterator()
Default constructor, does not iterate anywhere.
template<typename T>
lar::sparse_vector< T >::iterator::iterator ( const container_t c,
const typename special::end  _ 
)
inline

Special constructor: initializes at the end of the container.

Definition at line 1640 of file sparse_vector.h.

1640 : const_iterator(c, _) {}
const_iterator()
Default constructor, does not iterate anywhere.
template<typename T>
lar::sparse_vector< T >::iterator::iterator ( const_iterator  from)
inlineprotected

Definition at line 1683 of file sparse_vector.h.

1683 : const_iterator(from) {}
const_iterator()
Default constructor, does not iterate anywhere.

Member Function Documentation

template<typename T>
range_const_iterator lar::sparse_vector< T >::const_iterator::get_current_range ( ) const
inlineinherited

Returns the current range internal value; use it at your own risk!!

Definition at line 1568 of file sparse_vector.h.

Referenced by lar::sparse_vector< T >::make_void().

1568 { return currentRange; }
ranges_const_iterator currentRange
pointer to the current (or next) range
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator!= ( const const_iterator as) const
inlineinherited

Iterator comparisons.

Definition at line 1545 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

1546  {
1547  return (cont != as.cont) || (index != as.index);
1548  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
reference lar::sparse_vector< T >::iterator::operator* ( ) const
inline

Dereferenciation operator (can't write non-empty elements!)

Definition at line 1675 of file sparse_vector.h.

1675 { return reference(const_iterator::operator*()); }
const_iterator::reference reference
template<typename T>
iterator lar::sparse_vector< T >::iterator::operator+ ( difference_type  delta) const
inline

Increment and decrement operators.

Definition at line 1670 of file sparse_vector.h.

References operator+().

1670 { return const_iterator::operator+(delta); }
const_iterator operator+(difference_type delta) const
Increment and decrement operators.
template<typename T>
iterator& lar::sparse_vector< T >::iterator::operator++ ( )
inline

Increment and decrement operators.

Definition at line 1650 of file sparse_vector.h.

1651  {
1653  return *this;
1654  }
const_iterator & operator++()
Increment and decrement operators.
template<typename T>
iterator lar::sparse_vector< T >::iterator::operator++ ( int  _)
inline

Increment and decrement operators.

Definition at line 1655 of file sparse_vector.h.

References shims::map< Key, T, Compare, Allocator >::iter< Category, TT, Distance, Pointer, Reference >::operator++(), and lar::dump::operator+=().

1655 { return const_iterator::operator++(_); }
const_iterator & operator++()
Increment and decrement operators.
template<typename T>
iterator& lar::sparse_vector< T >::iterator::operator+= ( difference_type  delta)
inline

Increment and decrement operators.

Definition at line 1660 of file sparse_vector.h.

1661  {
1663  return *this;
1664  }
const_iterator & operator+=(difference_type delta)
Increment and decrement operators.
template<typename T >
lar::sparse_vector< T >::const_iterator::difference_type lar::sparse_vector< T >::const_iterator::operator- ( const const_iterator iter) const
inlineinherited

Distance operator.

distance operator

Definition at line 2478 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

2479 {
2480  if (cont != iter.cont) {
2481  throw std::runtime_error("lar::sparse_vector::const_iterator:"
2482  " difference with alien iterator");
2483  }
2484  return index - iter.index;
2485 } // lar::sparse_vector<T>::const_iterator::operator-(const_iterator)
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
iterator lar::sparse_vector< T >::iterator::operator- ( difference_type  delta) const
inline

Increment and decrement operators.

Definition at line 1671 of file sparse_vector.h.

References operator-().

1671 { return const_iterator::operator-(delta); }
const_iterator operator-(difference_type delta) const
Increment and decrement operators.
template<typename T>
iterator& lar::sparse_vector< T >::iterator::operator-= ( difference_type  delta)
inline

Increment and decrement operators.

Definition at line 1665 of file sparse_vector.h.

References lar::dump::operator+=().

1666  {
1668  return *this;
1669  }
const_iterator & operator+=(difference_type delta)
Increment and decrement operators.
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator< ( const const_iterator than) const
inlineinherited

Iterator comparisons.

Definition at line 1549 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

1550  {
1551  return (cont == than.cont) && (index < than.index);
1552  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator<= ( const const_iterator than) const
inlineinherited

Iterator comparisons.

Definition at line 1557 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

1558  {
1559  return (cont == than.cont) && (index <= than.index);
1560  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator== ( const const_iterator as) const
inlineinherited

Iterator comparisons.

Definition at line 1541 of file sparse_vector.h.

1542  {
1543  return (cont == as.cont) && (index == as.index);
1544  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator> ( const const_iterator than) const
inlineinherited

Iterator comparisons.

Definition at line 1553 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

1554  {
1555  return (cont == than.cont) && (index > than.index);
1556  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
bool lar::sparse_vector< T >::const_iterator::operator>= ( const const_iterator than) const
inlineinherited

Iterator comparisons.

Definition at line 1561 of file sparse_vector.h.

References lar::sparse_vector< T >::const_iterator::cont, and lar::sparse_vector< T >::const_iterator::index.

1562  {
1563  return (cont == than.cont) && (index >= than.index);
1564  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T>
reference lar::sparse_vector< T >::iterator::operator[] ( size_type  offset) const
inline

Random access.

Definition at line 1643 of file sparse_vector.h.

References shims::map< Key, T, Compare, Allocator >::iter< Category, TT, Distance, Pointer, Reference >::operator++().

1644  {
1645  return (*const_iterator::cont)[const_iterator::index + offset];
1646  }
const container_t * cont
pointer to the container
size_type index
pointer to the current value, as absolute index
template<typename T >
void lar::sparse_vector< T >::const_iterator::refresh_state ( )
protectedinherited

Reassigns the internal state according to the index.

Definition at line 2488 of file sparse_vector.h.

2489 {
2490  // update the currentRange
2491  // currentRange is the range including the current item, or next to it
2492  if (cont) {
2493  // the following is actually the range after the index:
2495  // if the index is inside the previous index, then we want to move there:
2496  if (currentRange != cont->ranges.begin()) {
2497  if ((currentRange - 1)->end_index() > index) --currentRange;
2498  }
2499  }
2500  else {
2501  currentRange = {};
2502  }
2503 } // lar::sparse_vector<T>::const_iterator::refresh_state()
const container_t * cont
pointer to the container
ranges_const_iterator currentRange
pointer to the current (or next) range
range_list_t ranges
list of ranges
range_iterator find_next_range_iter(size_type index)
Returns an iterator to the range after index.
size_type index
pointer to the current value, as absolute index

Member Data Documentation

template<typename T>
ranges_const_iterator lar::sparse_vector< T >::const_iterator::currentRange
protectedinherited

pointer to the current (or next) range

Definition at line 1603 of file sparse_vector.h.


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