@@ -38,7 +38,7 @@ use std::slice::{self, Iter as SliceIter, IterMut as SliceIterMut};
3838
3939/// Base for iterators over all axes.
4040///
41- /// Iterator element type is `*mut A `.
41+ /// Iterator element type is `NonNull<A> `.
4242#[ derive( Debug ) ]
4343pub struct Baseiter < A , D >
4444{
@@ -67,18 +67,18 @@ impl<A, D: Dimension> Baseiter<A, D>
6767
6868impl < A , D : Dimension > Iterator for Baseiter < A , D >
6969{
70- type Item = * mut A ;
70+ type Item = NonNull < A > ;
7171
7272 #[ inline]
73- fn next ( & mut self ) -> Option < * mut A >
73+ fn next ( & mut self ) -> Option < Self :: Item >
7474 {
7575 let index = match self . index {
7676 None => return None ,
7777 Some ( ref ix) => ix. clone ( ) ,
7878 } ;
7979 let offset = D :: stride_offset ( & index, & self . strides ) ;
8080 self . index = self . dim . next_for ( index) ;
81- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
81+ unsafe { Some ( self . ptr . offset ( offset) ) }
8282 }
8383
8484 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -88,7 +88,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
8888 }
8989
9090 fn fold < Acc , G > ( mut self , init : Acc , mut g : G ) -> Acc
91- where G : FnMut ( Acc , * mut A ) -> Acc
91+ where G : FnMut ( Acc , Self :: Item ) -> Acc
9292 {
9393 let ndim = self . dim . ndim ( ) ;
9494 debug_assert_ne ! ( ndim, 0 ) ;
@@ -103,7 +103,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
103103 let mut i = 0 ;
104104 let i_end = len - elem_index;
105105 while i < i_end {
106- accum = g ( accum, row_ptr. offset ( i as isize * stride) . as_ptr ( ) ) ;
106+ accum = g ( accum, row_ptr. offset ( i as isize * stride) ) ;
107107 i += 1 ;
108108 }
109109 }
@@ -137,7 +137,7 @@ impl<A, D: Dimension> ExactSizeIterator for Baseiter<A, D>
137137impl < A > DoubleEndedIterator for Baseiter < A , Ix1 >
138138{
139139 #[ inline]
140- fn next_back ( & mut self ) -> Option < * mut A >
140+ fn next_back ( & mut self ) -> Option < Self :: Item >
141141 {
142142 let index = match self . index {
143143 None => return None ,
@@ -149,10 +149,10 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
149149 self . index = None ;
150150 }
151151
152- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
152+ unsafe { Some ( self . ptr . offset ( offset) ) }
153153 }
154154
155- fn nth_back ( & mut self , n : usize ) -> Option < * mut A >
155+ fn nth_back ( & mut self , n : usize ) -> Option < Self :: Item >
156156 {
157157 let index = self . index ?;
158158 let len = self . dim [ 0 ] - index[ 0 ] ;
@@ -162,15 +162,15 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
162162 if index == self . dim {
163163 self . index = None ;
164164 }
165- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
165+ unsafe { Some ( self . ptr . offset ( offset) ) }
166166 } else {
167167 self . index = None ;
168168 None
169169 }
170170 }
171171
172172 fn rfold < Acc , G > ( mut self , init : Acc , mut g : G ) -> Acc
173- where G : FnMut ( Acc , * mut A ) -> Acc
173+ where G : FnMut ( Acc , Self :: Item ) -> Acc
174174 {
175175 let mut accum = init;
176176 if let Some ( index) = self . index {
@@ -182,8 +182,7 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
182182 accum = g (
183183 accum,
184184 self . ptr
185- . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) )
186- . as_ptr ( ) ,
185+ . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) ) ,
187186 ) ;
188187 }
189188 }
@@ -231,7 +230,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBase<'a, A, D>
231230 #[ inline]
232231 fn next ( & mut self ) -> Option < & ' a A >
233232 {
234- self . inner . next ( ) . map ( |p| unsafe { & * p } )
233+ self . inner . next ( ) . map ( |p| unsafe { p . as_ref ( ) } )
235234 }
236235
237236 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -242,7 +241,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBase<'a, A, D>
242241 fn fold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
243242 where G : FnMut ( Acc , Self :: Item ) -> Acc
244243 {
245- unsafe { self . inner . fold ( init, move |acc, ptr| g ( acc, & * ptr) ) }
244+ unsafe { self . inner . fold ( init, move |acc, ptr| g ( acc, ptr. as_ref ( ) ) ) }
246245 }
247246}
248247
@@ -251,13 +250,13 @@ impl<'a, A> DoubleEndedIterator for ElementsBase<'a, A, Ix1>
251250 #[ inline]
252251 fn next_back ( & mut self ) -> Option < & ' a A >
253252 {
254- self . inner . next_back ( ) . map ( |p| unsafe { & * p } )
253+ self . inner . next_back ( ) . map ( |p| unsafe { p . as_ref ( ) } )
255254 }
256255
257256 fn rfold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
258257 where G : FnMut ( Acc , Self :: Item ) -> Acc
259258 {
260- unsafe { self . inner . rfold ( init, move |acc, ptr| g ( acc, & * ptr) ) }
259+ unsafe { self . inner . rfold ( init, move |acc, ptr| g ( acc, ptr. as_ref ( ) ) ) }
261260 }
262261}
263262
@@ -651,7 +650,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBaseMut<'a, A, D>
651650 #[ inline]
652651 fn next ( & mut self ) -> Option < & ' a mut A >
653652 {
654- self . inner . next ( ) . map ( |p| unsafe { & mut * p } )
653+ self . inner . next ( ) . map ( |mut p| unsafe { p . as_mut ( ) } )
655654 }
656655
657656 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -662,7 +661,10 @@ impl<'a, A, D: Dimension> Iterator for ElementsBaseMut<'a, A, D>
662661 fn fold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
663662 where G : FnMut ( Acc , Self :: Item ) -> Acc
664663 {
665- unsafe { self . inner . fold ( init, move |acc, ptr| g ( acc, & mut * ptr) ) }
664+ unsafe {
665+ self . inner
666+ . fold ( init, move |acc, mut ptr| g ( acc, ptr. as_mut ( ) ) )
667+ }
666668 }
667669}
668670
@@ -671,13 +673,16 @@ impl<'a, A> DoubleEndedIterator for ElementsBaseMut<'a, A, Ix1>
671673 #[ inline]
672674 fn next_back ( & mut self ) -> Option < & ' a mut A >
673675 {
674- self . inner . next_back ( ) . map ( |p| unsafe { & mut * p } )
676+ self . inner . next_back ( ) . map ( |mut p| unsafe { p . as_mut ( ) } )
675677 }
676678
677679 fn rfold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
678680 where G : FnMut ( Acc , Self :: Item ) -> Acc
679681 {
680- unsafe { self . inner . rfold ( init, move |acc, ptr| g ( acc, & mut * ptr) ) }
682+ unsafe {
683+ self . inner
684+ . rfold ( init, move |acc, mut ptr| g ( acc, ptr. as_mut ( ) ) )
685+ }
681686 }
682687}
683688
@@ -753,7 +758,7 @@ where D: Dimension
753758 {
754759 self . iter
755760 . next ( )
756- . map ( |ptr| unsafe { ArrayView :: new_ ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
761+ . map ( |ptr| unsafe { ArrayView :: new ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
757762 }
758763
759764 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -777,7 +782,7 @@ impl<'a, A> DoubleEndedIterator for LanesIter<'a, A, Ix1>
777782 {
778783 self . iter
779784 . next_back ( )
780- . map ( |ptr| unsafe { ArrayView :: new_ ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
785+ . map ( |ptr| unsafe { ArrayView :: new ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
781786 }
782787}
783788
@@ -805,7 +810,7 @@ where D: Dimension
805810 {
806811 self . iter
807812 . next ( )
808- . map ( |ptr| unsafe { ArrayViewMut :: new_ ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
813+ . map ( |ptr| unsafe { ArrayViewMut :: new ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
809814 }
810815
811816 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -829,7 +834,7 @@ impl<'a, A> DoubleEndedIterator for LanesIterMut<'a, A, Ix1>
829834 {
830835 self . iter
831836 . next_back ( )
832- . map ( |ptr| unsafe { ArrayViewMut :: new_ ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
837+ . map ( |ptr| unsafe { ArrayViewMut :: new ( ptr, Ix1 ( self . inner_len ) , Ix1 ( self . inner_stride as Ix ) ) } )
833838 }
834839}
835840
0 commit comments