10 #ifndef EIGEN_AMBIVECTOR_H    11 #define EIGEN_AMBIVECTOR_H    22 template<
typename _Scalar, 
typename _StorageIndex>
    36     void init(
double estimatedDensity);
    66       return internal::convert_index<StorageIndex>(idx);
    76         Index allocSize = (size * 
sizeof(
ListEl) + 
sizeof(Scalar) - 1)/
sizeof(Scalar);
    95       allocSize = (allocSize + 
sizeof(
Scalar) - 1)/
sizeof(
Scalar);
    96       Scalar* newBuffer = 
new Scalar[allocSize];
   128 template<
typename _Scalar,
typename _StorageIndex>
   137 template<
typename _Scalar,
typename _StorageIndex>
   140   if (estimatedDensity>0.1)
   146 template<
typename _Scalar,
typename _StorageIndex>
   162 template<
typename _Scalar,
typename _StorageIndex>
   169 template<
typename _Scalar,
typename _StorageIndex>
   185 template<
typename _Scalar,
typename _StorageIndex>
   201       llElements[0].value = 
Scalar(0);
   203       llElements[0].next = -1;
   204       return llElements[0].value;
   221       eigen_assert(i>=llElements[
m_llCurrent].index && 
"you must call restart() before inserting an element with lower or equal index");
   222       while (nextel >= 0 && llElements[nextel].index<=i)
   225         nextel = llElements[nextel].next;
   254 template<
typename _Scalar,
typename _StorageIndex>
   270       while (elid >= 0 && llElements[elid].index<i)
   271         elid = llElements[elid].next;
   273       if (llElements[elid].index==i)
   282 template<
typename _Scalar,
typename _StorageIndex>
   300       m_isDense = m_vector.m_mode==
IsDense;
   305         m_cachedIndex = m_vector.m_start-1;
   311         m_currentEl = m_vector.m_llStart;
   312         while (m_currentEl>=0 && 
abs(llElements[m_currentEl].
value)<=m_epsilon)
   313           m_currentEl = llElements[m_currentEl].
next;
   321           m_cachedIndex = llElements[m_currentEl].index;
   322           m_cachedValue = llElements[m_currentEl].value;
   328     Scalar 
value()
 const { 
return m_cachedValue; }
   330     operator bool()
 const { 
return m_cachedIndex>=0; }
   339         } 
while (m_cachedIndex<m_vector.m_end && 
abs(m_vector.m_buffer[m_cachedIndex])<m_epsilon);
   340         if (m_cachedIndex<m_vector.m_end)
   341           m_cachedValue = m_vector.m_buffer[m_cachedIndex];
   349           m_currentEl = llElements[m_currentEl].
next;
   350         } 
while (m_currentEl>=0 && 
abs(llElements[m_currentEl].
value)<m_epsilon);
   357           m_cachedIndex = llElements[m_currentEl].index;
   358           m_cachedValue = llElements[m_currentEl].value;
   377 #endif // EIGEN_AMBIVECTOR_H 
NumTraits< Scalar >::Real RealScalar
Iterator(const AmbiVector &vec, const RealScalar &epsilon=0)
void setBounds(Index start, Index end)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
void init(double estimatedDensity)
StorageIndex index() const
void reallocate(Index size)
StorageIndex convert_index(Index idx)
Scalar & coeffRef(Index i)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const AbsReturnType abs() const
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API. 
StorageIndex size() const
StorageIndex m_allocatedSize
StorageIndex m_allocatedElements
NumTraits< Scalar >::Real RealScalar
#define eigen_internal_assert(x)
StorageIndex m_cachedIndex
const AmbiVector & m_vector
_StorageIndex StorageIndex