Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator Class Reference

#include <AmbiVector.h>

Public Types

typedef Scalar_ Scalar
 
typedef NumTraits< Scalar >::Real RealScalar
 

Public Member Functions

 Iterator (const AmbiVector &vec, const RealScalar &epsilon=0)
 
StorageIndex index () const
 
Scalar value () const
 
 operator bool () const
 
Iteratoroperator++ ()
 

Protected Attributes

const AmbiVectorm_vector
 
StorageIndex m_currentEl
 
RealScalar m_epsilon
 
StorageIndex m_cachedIndex
 
Scalar m_cachedValue
 
bool m_isDense
 

Detailed Description

template<typename Scalar_, typename StorageIndex_>
class Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator

Iterator over the nonzero coefficients

Member Typedef Documentation

◆ RealScalar

template<typename Scalar_ , typename StorageIndex_ >
typedef NumTraits<Scalar>::Real Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::RealScalar

◆ Scalar

template<typename Scalar_ , typename StorageIndex_ >
typedef Scalar_ Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::Scalar

Constructor & Destructor Documentation

◆ Iterator()

template<typename Scalar_ , typename StorageIndex_ >
Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::Iterator ( const AmbiVector vec,
const RealScalar epsilon = 0 
)
inlineexplicit

Default constructor

Parameters
vecthe vector on which we iterate
epsilonthe minimal value used to prune zero coefficients. In practice, all coefficients having a magnitude smaller than epsilon are skipped.
262  : m_vector(vec) {
263  using std::abs;
264  m_epsilon = epsilon;
266  if (m_isDense) {
267  m_currentEl = 0; // this is to avoid a compilation warning
268  m_cachedValue = 0; // this is to avoid a compilation warning
270  ++(*this);
271  } else {
272  ListEl* EIGEN_RESTRICT llElements = reinterpret_cast<ListEl*>(m_vector.m_buffer);
274  while (m_currentEl >= 0 && abs(llElements[m_currentEl].value) <= m_epsilon)
275  m_currentEl = llElements[m_currentEl].next;
276  if (m_currentEl < 0) {
277  m_cachedValue = 0; // this is to avoid a compilation warning
278  m_cachedIndex = -1;
279  } else {
280  m_cachedIndex = llElements[m_currentEl].index;
281  m_cachedValue = llElements[m_currentEl].value;
282  }
283  }
284  }
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
#define EIGEN_RESTRICT
Definition: Macros.h:1067
StorageIndex m_cachedIndex
Definition: AmbiVector.h:320
const AmbiVector & m_vector
Definition: AmbiVector.h:317
Scalar m_cachedValue
Definition: AmbiVector.h:321
bool m_isDense
Definition: AmbiVector.h:322
StorageIndex m_currentEl
Definition: AmbiVector.h:318
RealScalar m_epsilon
Definition: AmbiVector.h:319
Scalar value() const
Definition: AmbiVector.h:287
StorageIndex m_start
Definition: AmbiVector.h:108
Scalar * m_buffer
Definition: AmbiVector.h:105
StorageIndex m_mode
Definition: AmbiVector.h:112
StorageIndex m_llStart
Definition: AmbiVector.h:115
@ IsDense
Definition: Constants.h:365
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43

References abs(), EIGEN_RESTRICT, oomph::SarahBL::epsilon, Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::ListEl::index, Eigen::IsDense, and Eigen::value.

Member Function Documentation

◆ index()

template<typename Scalar_ , typename StorageIndex_ >
StorageIndex Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::index ( ) const
inline
286 { return m_cachedIndex; }

◆ operator bool()

template<typename Scalar_ , typename StorageIndex_ >
Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::operator bool ( ) const
inline
289 { return m_cachedIndex >= 0; }

◆ operator++()

template<typename Scalar_ , typename StorageIndex_ >
Iterator& Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::operator++ ( )
inline
291  {
292  using std::abs;
293  if (m_isDense) {
294  do {
295  ++m_cachedIndex;
299  else
300  m_cachedIndex = -1;
301  } else {
302  ListEl* EIGEN_RESTRICT llElements = reinterpret_cast<ListEl*>(m_vector.m_buffer);
303  do {
304  m_currentEl = llElements[m_currentEl].next;
305  } while (m_currentEl >= 0 && abs(llElements[m_currentEl].value) <= m_epsilon);
306  if (m_currentEl < 0) {
307  m_cachedIndex = -1;
308  } else {
309  m_cachedIndex = llElements[m_currentEl].index;
310  m_cachedValue = llElements[m_currentEl].value;
311  }
312  }
313  return *this;
314  }
StorageIndex m_end
Definition: AmbiVector.h:109

References abs(), EIGEN_RESTRICT, Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::ListEl::next, and Eigen::value.

◆ value()

template<typename Scalar_ , typename StorageIndex_ >
Scalar Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::value ( ) const
inline
287 { return m_cachedValue; }

Member Data Documentation

◆ m_cachedIndex

template<typename Scalar_ , typename StorageIndex_ >
StorageIndex Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_cachedIndex
protected

◆ m_cachedValue

template<typename Scalar_ , typename StorageIndex_ >
Scalar Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_cachedValue
protected

◆ m_currentEl

template<typename Scalar_ , typename StorageIndex_ >
StorageIndex Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_currentEl
protected

◆ m_epsilon

template<typename Scalar_ , typename StorageIndex_ >
RealScalar Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_epsilon
protected

◆ m_isDense

template<typename Scalar_ , typename StorageIndex_ >
bool Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_isDense
protected

◆ m_vector

template<typename Scalar_ , typename StorageIndex_ >
const AmbiVector& Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::Iterator::m_vector
protected

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