25 #ifndef EIGEN_SPARSEVECTOR_H
26 #define EIGEN_SPARSEVECTOR_H
44 template<
typename _Scalar,
int _Options,
typename _Index>
45 struct traits<SparseVector<_Scalar, _Options, _Index> >
47 typedef _Scalar Scalar;
49 typedef Sparse StorageKind;
50 typedef MatrixXpr XprKind;
54 RowsAtCompileTime = IsColVector ?
Dynamic : 1,
55 ColsAtCompileTime = IsColVector ? 1 : Dynamic,
56 MaxRowsAtCompileTime = RowsAtCompileTime,
57 MaxColsAtCompileTime = ColsAtCompileTime,
65 template<
typename _Scalar,
int _Options,
typename _Index>
78 enum {
IsColVector = internal::traits<SparseVector>::IsColVector };
84 internal::CompressedStorage<Scalar,Index>
m_data;
87 internal::CompressedStorage<Scalar,Index>&
_data() {
return m_data; }
88 internal::CompressedStorage<Scalar,Index>&
_data()
const {
return m_data; }
124 return m_data.atWithInsertion(i);
130 class ReverseInnerIterator;
169 while ( (p >= startId) && (
m_data.index(p) > i) )
189 m_data.prune(reference,epsilon);
212 template<
typename OtherDerived>
245 template<
typename OtherDerived>
254 #ifndef EIGEN_PARSED_BY_DOXYGEN
255 template<
typename Lhs,
typename Rhs>
265 s <<
"(" << m.
m_data.value(i) <<
"," << m.
m_data.index(i) <<
") ";
315 # ifdef EIGEN_SPARSEVECTOR_PLUGIN
316 # include EIGEN_SPARSEVECTOR_PLUGIN
320 template<
typename OtherDerived>
323 const OtherDerived& other(_other.
derived());
328 Index nnz = other.nonZeros();
333 typename OtherDerived::InnerIterator it(other, i);
347 template<
typename Scalar,
int _Options,
typename _Index>
348 class SparseVector<Scalar,_Options,_Index>::InnerIterator
358 InnerIterator(
const internal::CompressedStorage<Scalar,Index>& data)
362 inline InnerIterator& operator++() { m_id++;
return *
this; }
364 inline Scalar value()
const {
return m_data.value(m_id); }
367 inline Index index()
const {
return m_data.index(m_id); }
371 inline operator bool()
const {
return (m_id < m_end); }
374 const internal::CompressedStorage<Scalar,Index>&
m_data;
379 template<
typename Scalar,
int _Options,
typename _Index>
380 class SparseVector<Scalar,_Options,_Index>::ReverseInnerIterator
390 ReverseInnerIterator(
const internal::CompressedStorage<Scalar,Index>& data)
394 inline ReverseInnerIterator& operator--() { m_id--;
return *
this; }
396 inline Scalar value()
const {
return m_data.value(m_id-1); }
399 inline Index index()
const {
return m_data.index(m_id-1); }
403 inline operator bool()
const {
return (m_id > m_start); }
406 const internal::CompressedStorage<Scalar,Index>&
m_data;
413 #endif // EIGEN_SPARSEVECTOR_H