aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-01-25 11:55:39 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-01-25 11:55:39 +0100
commit869b4443ac4a55c09a0632e2dbf621587749e164 (patch)
treefebda9b7f7ee64f26a2e8238099fc9c5530d4dc4 /Eigen
parente3a15a03a4fe758ed0a00f3a2b083d7ca58ca16b (diff)
Add SparseVector::conservativeResize() method.
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/SparseCore/SparseVector.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/Eigen/src/SparseCore/SparseVector.h b/Eigen/src/SparseCore/SparseVector.h
index 7ec73a365..4db3003d2 100644
--- a/Eigen/src/SparseCore/SparseVector.h
+++ b/Eigen/src/SparseCore/SparseVector.h
@@ -222,6 +222,24 @@ class SparseVector
m_data.clear();
}
+ /** Resizes the sparse vector to \a newSize, while leaving old values untouched.
+ *
+ * If the size of the vector is decreased, then the storage of the out-of bounds coefficients is kept and reserved.
+ * Call .data().squeeze() to free extra memory.
+ *
+ * \sa reserve(), setZero()
+ */
+ void conservativeResize(Index newSize)
+ {
+ if (newSize < m_size)
+ {
+ Index i = 0;
+ while (i<m_data.size() && m_data.index(i)<newSize) ++i;
+ m_data.resize(i);
+ }
+ m_size = newSize;
+ }
+
void resizeNonZeros(Index size) { m_data.resize(size); }
inline SparseVector() : m_size(0) { check_template_parameters(); resize(0); }