Implements `Extend` for `Matrix<N, Dynamic, U1>`.

Extends a `Vector` with new rows populated from an iterator.

Inspired by https://github.com/rustsim/nalgebra/issues/446#issuecomment-437931790
This commit is contained in:
Jack Wrenn 2018-11-12 13:53:30 -05:00 committed by Sébastien Crozet
parent c3dd709c0a
commit f711c107ca
2 changed files with 33 additions and 0 deletions

View File

@ -751,3 +751,25 @@ where
self.data.extend(iter);
}
}
/// Extend the number of rows of the `Vector` with elements from
/// a given iterator.
impl<N, S> Extend<N> for Matrix<N, Dynamic, U1, S>
where
N: Scalar,
S: Extend<N>,
{
/// Extend the number of rows of a `Vector` with elements
/// from the given iterator.
///
/// # Example
/// ```
/// use nalgebra::DVector;
/// let mut vector = DVector::from_vec(3, vec![0, 1, 2]);
/// vector.extend(vec![3, 4, 5]);
/// assert!(vector.eq(&DVector::from_vec(6, vec![0, 1, 2, 3, 4, 5])));
/// ```
fn extend<I: IntoIterator<Item=N>>(&mut self, iter: I) {
self.data.extend(iter);
}
}

View File

@ -258,3 +258,14 @@ impl<N, R: Dim> Extend<N> for MatrixVec<N, R, Dynamic>
"The number of elements produced by the given iterator was not a multiple of the number of rows.");
}
}
impl<N> Extend<N> for MatrixVec<N, Dynamic, U1>
{
/// Extends the number of rows of the `MatrixVec` with elements
/// from the given iterator.
fn extend<I: IntoIterator<Item=N>>(&mut self, iter: I)
{
self.data.extend(iter);
self.nrows = Dynamic::new(self.data.len());
}
}