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
StorageIndex index() const
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)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const AbsReturnType abs() const
StorageIndex size() const
void reallocate(Index size)
StorageIndex convert_index(Index idx)
Scalar & coeffRef(Index i)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
StorageIndex m_allocatedSize
StorageIndex m_allocatedElements
NumTraits< Scalar >::Real RealScalar
#define eigen_internal_assert(x)
StorageIndex m_cachedIndex
const AmbiVector & m_vector
_StorageIndex StorageIndex