@@ -385,15 +385,15 @@ impl Slice {
385
385
/// Iterator over the slice's indices.
386
386
pub fn iter ( & self ) -> SliceIterator {
387
387
SliceIterator {
388
- slice : self ,
389
- pos : CartesianIterator :: new ( & self . sizes ) ,
388
+ slice : self . clone ( ) ,
389
+ pos : CartesianIterator :: new ( self . sizes . clone ( ) ) ,
390
390
}
391
391
}
392
392
393
393
/// Iterator over sub-dimensions of the slice.
394
394
pub fn dim_iter ( & self , dims : usize ) -> DimSliceIterator {
395
395
DimSliceIterator {
396
- pos : CartesianIterator :: new ( & self . sizes [ 0 ..dims] ) ,
396
+ pos : CartesianIterator :: new ( self . sizes [ 0 ..dims] . to_vec ( ) ) ,
397
397
}
398
398
}
399
399
@@ -607,7 +607,7 @@ impl Slice {
607
607
608
608
// Validate that every address in the new view maps to a valid
609
609
// coordinate in base.
610
- for coord in CartesianIterator :: new ( new_sizes) {
610
+ for coord in CartesianIterator :: new ( new_sizes. to_vec ( ) ) {
611
611
#[ allow( clippy:: identity_op) ]
612
612
let offset_in_view = 0 + coord
613
613
. iter ( )
@@ -662,20 +662,20 @@ impl std::fmt::Display for Slice {
662
662
}
663
663
}
664
664
665
- impl < ' a > IntoIterator for & ' a Slice {
665
+ impl IntoIterator for & Slice {
666
666
type Item = usize ;
667
- type IntoIter = SliceIterator < ' a > ;
667
+ type IntoIter = SliceIterator ;
668
668
fn into_iter ( self ) -> Self :: IntoIter {
669
669
self . iter ( )
670
670
}
671
671
}
672
672
673
- pub struct SliceIterator < ' a > {
674
- pub ( crate ) slice : & ' a Slice ,
675
- pos : CartesianIterator < ' a > ,
673
+ pub struct SliceIterator {
674
+ pub ( crate ) slice : Slice ,
675
+ pos : CartesianIterator ,
676
676
}
677
677
678
- impl < ' a > Iterator for SliceIterator < ' a > {
678
+ impl Iterator for SliceIterator {
679
679
type Item = usize ;
680
680
681
681
fn next ( & mut self ) -> Option < Self :: Item > {
@@ -694,11 +694,11 @@ impl<'a> Iterator for SliceIterator<'a> {
694
694
///
695
695
/// Coordinates are yielded in row-major order (last dimension varies
696
696
/// fastest).
697
- pub struct DimSliceIterator < ' a > {
698
- pos : CartesianIterator < ' a > ,
697
+ pub struct DimSliceIterator {
698
+ pos : CartesianIterator ,
699
699
}
700
700
701
- impl < ' a > Iterator for DimSliceIterator < ' a > {
701
+ impl Iterator for DimSliceIterator {
702
702
type Item = Vec < usize > ;
703
703
704
704
fn next ( & mut self ) -> Option < Self :: Item > {
@@ -712,25 +712,25 @@ impl<'a> Iterator for DimSliceIterator<'a> {
712
712
/// `dims`, where each coordinate lies in `[0..dims[i])`.
713
713
/// # Example
714
714
/// ```ignore
715
- /// let iter = CartesianIterator::new(& [2, 3]);
715
+ /// let iter = CartesianIterator::new(vec! [2, 3]);
716
716
/// let coords: Vec<_> = iter.collect();
717
717
/// assert_eq!(coords, vec![
718
718
/// vec![0, 0], vec![0, 1], vec![0, 2],
719
719
/// vec![1, 0], vec![1, 1], vec![1, 2],
720
720
/// ]);
721
721
/// ```
722
- pub ( crate ) struct CartesianIterator < ' a > {
723
- dims : & ' a [ usize ] ,
722
+ pub ( crate ) struct CartesianIterator {
723
+ dims : Vec < usize > ,
724
724
index : usize ,
725
725
}
726
726
727
- impl < ' a > CartesianIterator < ' a > {
728
- pub ( crate ) fn new ( dims : & ' a [ usize ] ) -> Self {
727
+ impl CartesianIterator {
728
+ pub ( crate ) fn new ( dims : Vec < usize > ) -> Self {
729
729
CartesianIterator { dims, index : 0 }
730
730
}
731
731
}
732
732
733
- impl < ' a > Iterator for CartesianIterator < ' a > {
733
+ impl Iterator for CartesianIterator {
734
734
type Item = Vec < usize > ;
735
735
736
736
fn next ( & mut self ) -> Option < Self :: Item > {
@@ -804,7 +804,7 @@ mod tests {
804
804
#[ test]
805
805
fn test_cartesian_iterator ( ) {
806
806
let dims = vec ! [ 2 , 2 , 2 ] ;
807
- let iter = CartesianIterator :: new ( & dims) ;
807
+ let iter = CartesianIterator :: new ( dims) ;
808
808
let products: Vec < Vec < usize > > = iter. collect ( ) ;
809
809
assert_eq ! (
810
810
products,
0 commit comments