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)
Namespace containing all symbols from the Eigen library.
void setBounds(Index start, Index end)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
void init(double estimatedDensity)
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