Implement IntoIterator for &Matrix and &mut Matrix

IntoIterator for Matrix will beharder to implement.
Partially addresses #241.
This commit is contained in:
Sébastien Crozet 2017-04-11 00:13:28 +02:00
parent cbbe1a2aee
commit 68b7d21828
1 changed files with 22 additions and 1 deletions

View File

@ -7,7 +7,8 @@ use alga::general::{SubsetOf, SupersetOf};
use core::{Scalar, Matrix}; use core::{Scalar, Matrix};
use core::dimension::{Dim, DimName, DimNameMul, DimNameProd, U1, U2, U3, U4, U5, U6}; use core::dimension::{Dim, DimName, DimNameMul, DimNameProd, U1, U2, U3, U4, U5, U6};
use core::constraint::{ShapeConstraint, SameNumberOfRows, SameNumberOfColumns}; use core::constraint::{ShapeConstraint, SameNumberOfRows, SameNumberOfColumns};
use core::storage::OwnedStorage; use core::storage::{Storage, StorageMut, OwnedStorage};
use core::iter::{MatrixIter, MatrixIterMut};
use core::allocator::{OwnedAllocator, SameShapeAllocator}; use core::allocator::{OwnedAllocator, SameShapeAllocator};
@ -62,6 +63,26 @@ impl<N1, N2, R1, C1, R2, C2, SA, SB> SubsetOf<Matrix<N2, R2, C2, SB>> for Matrix
} }
} }
impl<'a, N: Scalar, R: Dim, C: Dim, S: Storage<N, R, C>> IntoIterator for &'a Matrix<N, R, C, S> {
type Item = &'a N;
type IntoIter = MatrixIter<'a, N, R, C, S>;
#[inline]
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
impl<'a, N: Scalar, R: Dim, C: Dim, S: StorageMut<N, R, C>> IntoIterator for &'a mut Matrix<N, R, C, S> {
type Item = &'a mut N;
type IntoIter = MatrixIterMut<'a, N, R, C, S>;
#[inline]
fn into_iter(self) -> Self::IntoIter {
self.iter_mut()
}
}
macro_rules! impl_from_into_asref_1D( macro_rules! impl_from_into_asref_1D(
($($Dim: ident => $SZ: expr);* $(;)*) => {$( ($($Dim: ident => $SZ: expr);* $(;)*) => {$(