From 17869bafb7d1b96f4ee5eb629b03ea022a352fd9 Mon Sep 17 00:00:00 2001 From: Adam Kern Date: Tue, 20 May 2025 20:13:25 -0400 Subject: [PATCH 1/5] Adds `into_outer_iter` as public fn --- src/arraytraits.rs | 2 +- src/impl_methods.rs | 2 +- src/impl_views/conversions.rs | 14 +++++--------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/arraytraits.rs b/src/arraytraits.rs index 5068cd6c2..0d64ef3a9 100644 --- a/src/arraytraits.rs +++ b/src/arraytraits.rs @@ -357,7 +357,7 @@ where D: Dimension fn into_iter(self) -> Self::IntoIter { - self.into_iter_() + Iter::new(self) } } diff --git a/src/impl_methods.rs b/src/impl_methods.rs index 01a0a9a4d..87b308234 100644 --- a/src/impl_methods.rs +++ b/src/impl_methods.rs @@ -463,7 +463,7 @@ impl ArrayRef pub fn iter(&self) -> Iter<'_, A, D> { // debug_assert!(self.pointer_is_inbounds()); - self.view().into_iter_() + self.view().into_iter() } /// Return an iterator of mutable references to the elements of the array. diff --git a/src/impl_views/conversions.rs b/src/impl_views/conversions.rs index efd876f7a..e07838cb3 100644 --- a/src/impl_views/conversions.rs +++ b/src/impl_views/conversions.rs @@ -213,7 +213,7 @@ where D: Dimension } } -/// Private array view methods +/// Methods for iterating over array views impl<'a, A, D> ArrayView<'a, A, D> where D: Dimension { @@ -229,14 +229,10 @@ where D: Dimension ElementsBase::new(self) } - pub(crate) fn into_iter_(self) -> Iter<'a, A, D> - { - Iter::new(self) - } - - /// Return an outer iterator for this view. - #[doc(hidden)] // not official - #[deprecated(note = "This method will be replaced.")] + /// Return an outer iterator for this view, but with the lifetime + /// of the view's data. + /// + /// See [ArrayRef::outer_iter] for details. pub fn into_outer_iter(self) -> iter::AxisIter<'a, A, D::Smaller> where D: RemoveAxis { From cadf889907359c6ce6a88b366436d43af16c7c4c Mon Sep 17 00:00:00 2001 From: Adam Kern Date: Tue, 20 May 2025 21:23:47 -0400 Subject: [PATCH 2/5] Adds into_ versions of iterators for views --- src/arraytraits.rs | 2 +- src/impl_methods.rs | 4 +- src/impl_views/conversions.rs | 114 +++++++++++++++++++++++++++++++--- 3 files changed, 107 insertions(+), 13 deletions(-) diff --git a/src/arraytraits.rs b/src/arraytraits.rs index 0d64ef3a9..a34b1985e 100644 --- a/src/arraytraits.rs +++ b/src/arraytraits.rs @@ -369,7 +369,7 @@ where D: Dimension fn into_iter(self) -> Self::IntoIter { - self.into_iter_() + IterMut::new(self) } } diff --git a/src/impl_methods.rs b/src/impl_methods.rs index 87b308234..78480156c 100644 --- a/src/impl_methods.rs +++ b/src/impl_methods.rs @@ -474,7 +474,7 @@ impl ArrayRef /// Iterator element type is `&mut A`. pub fn iter_mut(&mut self) -> IterMut<'_, A, D> { - self.view_mut().into_iter_() + self.view_mut().into_iter() } /// Return an iterator of indexes and references to the elements of the array. @@ -1290,7 +1290,7 @@ impl ArrayRef pub fn outer_iter_mut(&mut self) -> AxisIterMut<'_, A, D::Smaller> where D: RemoveAxis { - self.view_mut().into_outer_iter() + self.view_mut().into_outer_iter_mut() } /// Return an iterator that traverses over `axis` diff --git a/src/impl_views/conversions.rs b/src/impl_views/conversions.rs index e07838cb3..8556f5901 100644 --- a/src/impl_views/conversions.rs +++ b/src/impl_views/conversions.rs @@ -213,7 +213,7 @@ where D: Dimension } } -/// Methods for iterating over array views +/// Methods for iterating over array views. impl<'a, A, D> ArrayView<'a, A, D> where D: Dimension { @@ -229,17 +229,47 @@ where D: Dimension ElementsBase::new(self) } - /// Return an outer iterator for this view, but with the lifetime - /// of the view's data. + /// Convert into an outer iterator for this view. /// - /// See [ArrayRef::outer_iter] for details. + /// Unlike [ArrayRef::outer_iter], this methods preserves the lifetime of the data, + /// not the view itself. pub fn into_outer_iter(self) -> iter::AxisIter<'a, A, D::Smaller> where D: RemoveAxis { AxisIter::new(self, Axis(0)) } + + /// Convert into an indexed iterator. + /// + /// Unlike [ArrayRef::indexed_iter], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_indexed_iter(self) -> iter::IndexedIter<'a, A, D> + { + iter::IndexedIter::new(self.into_elements_base()) + } + + /// Convert into an iterator over an `axis`. + /// + /// Unlike [ArrayRef::axis_iter], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_iter(self, axis: Axis) -> iter::AxisIter<'a, A, D::Smaller> + where D: RemoveAxis + { + AxisIter::new(self, axis) + } + + /// Convert into an iterator over an `axis` by chunks. + /// + /// Unlike [`ArrayRef::axis_chunks_iter`], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_chunks_iter(self, axis: Axis, chunk_size: usize) -> iter::AxisChunksIter<'a, A, D> + where D: RemoveAxis + { + iter::AxisChunksIter::new(self, axis, chunk_size) + } } +/// Methods for iterating over mutable array views. impl<'a, A, D> ArrayViewMut<'a, A, D> where D: Dimension { @@ -290,17 +320,81 @@ where D: Dimension } } - pub(crate) fn into_iter_(self) -> IterMut<'a, A, D> + /// Convert into an outer iterator for this view. + /// + /// Unlike [ArrayRef::outer_iter], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_outer_iter(self) -> iter::AxisIter<'a, A, D::Smaller> + where D: RemoveAxis + { + AxisIter::new(self.into_view(), Axis(0)) + } + + /// Convert into an indexed iterator. + /// + /// Unlike [ArrayRef::indexed_iter], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_indexed_iter(self) -> iter::IndexedIter<'a, A, D> + { + iter::IndexedIter::new(self.into_view().into_elements_base()) + } + + /// Convert into an iterator over an `axis`. + /// + /// Unlike [ArrayRef::axis_iter], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_iter(self, axis: Axis) -> iter::AxisIter<'a, A, D::Smaller> + where D: RemoveAxis + { + AxisIter::new(self.into_view(), axis) + } + + /// Convert into an iterator over an `axis` by chunks. + /// + /// Unlike [`ArrayRef::axis_chunks_iter`], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_chunks_iter(self, axis: Axis, chunk_size: usize) -> iter::AxisChunksIter<'a, A, D> + where D: RemoveAxis { - IterMut::new(self) + iter::AxisChunksIter::new(self.into_view(), axis, chunk_size) } - /// Return an outer iterator for this view. - #[doc(hidden)] // not official - #[deprecated(note = "This method will be replaced.")] - pub fn into_outer_iter(self) -> iter::AxisIterMut<'a, A, D::Smaller> + /// Convert into an outer iterator for this view. + /// + /// Unlike [ArrayRef::outer_iter_mut], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_outer_iter_mut(self) -> iter::AxisIterMut<'a, A, D::Smaller> where D: RemoveAxis { AxisIterMut::new(self, Axis(0)) } + + /// Convert into an indexed iterator. + /// + /// Unlike [ArrayRef::indexed_iter_mut], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_indexed_iter_mut(self) -> iter::IndexedIterMut<'a, A, D> + { + iter::IndexedIterMut::new(self.into_elements_base()) + } + + /// Convert into an iterator over an `axis`. + /// + /// Unlike [ArrayRef::axis_iter_mut], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_iter_mut(self, axis: Axis) -> iter::AxisIterMut<'a, A, D::Smaller> + where D: RemoveAxis + { + AxisIterMut::new(self, axis) + } + + /// Convert into an iterator over an `axis` by chunks. + /// + /// Unlike [`ArrayRef::axis_chunks_iter_mut`], this methods preserves the lifetime of the data, + /// not the view itself. + pub fn into_axis_chunks_iter_mut(self, axis: Axis, chunk_size: usize) -> iter::AxisChunksIterMut<'a, A, D> + where D: RemoveAxis + { + iter::AxisChunksIterMut::new(self, axis, chunk_size) + } } From b79eae6e7db973ddd79795dffea9f779d2141bb4 Mon Sep 17 00:00:00 2001 From: Adam Kern Date: Tue, 20 May 2025 21:43:02 -0400 Subject: [PATCH 3/5] Removes unused imports --- src/impl_views/conversions.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/impl_views/conversions.rs b/src/impl_views/conversions.rs index 8556f5901..5bc5f9ad6 100644 --- a/src/impl_views/conversions.rs +++ b/src/impl_views/conversions.rs @@ -13,7 +13,7 @@ use std::mem::MaybeUninit; use crate::imp_prelude::*; -use crate::{Baseiter, ElementsBase, ElementsBaseMut, Iter, IterMut}; +use crate::{Baseiter, ElementsBase, ElementsBaseMut}; use crate::dimension::offset_from_low_addr_ptr_to_logical_ptr; use crate::iter::{self, AxisIter, AxisIterMut}; From 73c27aa3d21a033f4501dc4f8cfd5fdf2c5754c5 Mon Sep 17 00:00:00 2001 From: Adam Kern Date: Tue, 20 May 2025 21:51:59 -0400 Subject: [PATCH 4/5] Fix unused import --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 77bdc9313..c6b7e24a6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -150,7 +150,7 @@ pub use crate::order::Order; pub use crate::slice::{MultiSliceArg, NewAxis, Slice, SliceArg, SliceInfo, SliceInfoElem, SliceNextDim}; use crate::iterators::Baseiter; -use crate::iterators::{ElementsBase, ElementsBaseMut, Iter, IterMut}; +use crate::iterators::{ElementsBase, ElementsBaseMut, Iter}; pub use crate::arraytraits::AsArray; pub use crate::linalg_traits::LinalgScalar; From 844479b7ede79e4233bc18a5316de9d3e3a1630f Mon Sep 17 00:00:00 2001 From: Adam Kern Date: Tue, 20 May 2025 22:04:55 -0400 Subject: [PATCH 5/5] Yet another unused import --- src/array_serde.rs | 2 +- src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/array_serde.rs b/src/array_serde.rs index 50d9c2905..5d51a8011 100644 --- a/src/array_serde.rs +++ b/src/array_serde.rs @@ -18,7 +18,7 @@ use std::marker::PhantomData; use crate::imp_prelude::*; use super::arraytraits::ARRAY_FORMAT_VERSION; -use super::Iter; +use crate::iterators::Iter; use crate::IntoDimension; /// Verifies that the version of the deserialized array matches the current diff --git a/src/lib.rs b/src/lib.rs index c6b7e24a6..3efb378ce 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -150,7 +150,7 @@ pub use crate::order::Order; pub use crate::slice::{MultiSliceArg, NewAxis, Slice, SliceArg, SliceInfo, SliceInfoElem, SliceNextDim}; use crate::iterators::Baseiter; -use crate::iterators::{ElementsBase, ElementsBaseMut, Iter}; +use crate::iterators::{ElementsBase, ElementsBaseMut}; pub use crate::arraytraits::AsArray; pub use crate::linalg_traits::LinalgScalar;