Implements `Extend` for `Matrix<N, Dim, Dynamic>`.
Extends a matrix with new columns populated from an iterator.
This commit is contained in:
parent
41a1e91ac9
commit
c3dd709c0a
|
@ -703,3 +703,51 @@ unsafe fn extend_rows<N: Scalar>(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Extend the number of columns of the `Matrix` with elements from
|
||||||
|
/// a given iterator.
|
||||||
|
impl<N, R, S> Extend<N> for Matrix<N, R, Dynamic, S>
|
||||||
|
where
|
||||||
|
N: Scalar,
|
||||||
|
R: Dim,
|
||||||
|
S: Extend<N>,
|
||||||
|
{
|
||||||
|
/// Extend the number of columns of the `Matrix` with elements
|
||||||
|
/// from the given iterator.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```
|
||||||
|
/// use nalgebra::{Dynamic, Matrix, MatrixMN, Matrix3};
|
||||||
|
///
|
||||||
|
/// let data = vec![0, 1, 2, // column 1
|
||||||
|
/// 3, 4, 5]; // column 2
|
||||||
|
///
|
||||||
|
/// let mut matrix : MatrixMN<_, Dynamic, Dynamic> =
|
||||||
|
/// Matrix::from_vec_generic(Dynamic::new(3), Dynamic::new(2), data);
|
||||||
|
///
|
||||||
|
/// matrix.extend(vec![6, 7, 8]); // column 3
|
||||||
|
///
|
||||||
|
/// assert!(matrix.eq(&Matrix3::new(0, 3, 6,
|
||||||
|
/// 1, 4, 7,
|
||||||
|
/// 2, 5, 8)));
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// This function panics if the number of elements yielded by the
|
||||||
|
/// given iterator is not a multiple of the number of rows of the
|
||||||
|
/// `Matrix`.
|
||||||
|
///
|
||||||
|
/// ```should_panic
|
||||||
|
/// # use nalgebra::{Dynamic, Matrix, MatrixMN, Matrix3, U3};
|
||||||
|
/// let data = vec![0, 1, 2, // column 1
|
||||||
|
/// 3, 4, 5]; // column 2
|
||||||
|
///
|
||||||
|
/// let mut matrix : MatrixMN<_, U3, Dynamic> =
|
||||||
|
/// Matrix::from_vec_generic(U3, Dynamic::new(2), data);
|
||||||
|
///
|
||||||
|
/// matrix.extend(vec![6, 7, 8, 9]); // column 3
|
||||||
|
/// ```
|
||||||
|
fn extend<I: IntoIterator<Item=N>>(&mut self, iter: I) {
|
||||||
|
self.data.extend(iter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -240,3 +240,21 @@ unsafe impl<N: Scalar, R: DimName> ContiguousStorage<N, R, Dynamic> for MatrixVe
|
||||||
|
|
||||||
unsafe impl<N: Scalar, R: DimName> ContiguousStorageMut<N, R, Dynamic> for MatrixVec<N, R, Dynamic> where DefaultAllocator: Allocator<N, R, Dynamic, Buffer = Self>
|
unsafe impl<N: Scalar, R: DimName> ContiguousStorageMut<N, R, Dynamic> for MatrixVec<N, R, Dynamic> where DefaultAllocator: Allocator<N, R, Dynamic, Buffer = Self>
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
impl<N, R: Dim> Extend<N> for MatrixVec<N, R, Dynamic>
|
||||||
|
{
|
||||||
|
/// Extends the number of columns of the `MatrixVec` with elements
|
||||||
|
/// from the given iterator.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// This function panics if the number of elements yielded by the
|
||||||
|
/// given iterator is not a multiple of the number of rows of the
|
||||||
|
/// `MatrixVec`.
|
||||||
|
fn extend<I: IntoIterator<Item=N>>(&mut self, iter: I)
|
||||||
|
{
|
||||||
|
self.data.extend(iter);
|
||||||
|
self.ncols = Dynamic::new(self.data.len() / self.nrows.value());
|
||||||
|
assert!(self.data.len() % self.nrows.value() == 0,
|
||||||
|
"The number of elements produced by the given iterator was not a multiple of the number of rows.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue