@@ -38,7 +38,7 @@ use std::slice::{self, Iter as SliceIter, IterMut as SliceIterMut};
38
38
39
39
/// Base for iterators over all axes.
40
40
///
41
- /// Iterator element type is `*mut A `.
41
+ /// Iterator element type is `NonNull<A> `.
42
42
#[ derive( Debug ) ]
43
43
pub struct Baseiter < A , D >
44
44
{
@@ -67,18 +67,18 @@ impl<A, D: Dimension> Baseiter<A, D>
67
67
68
68
impl < A , D : Dimension > Iterator for Baseiter < A , D >
69
69
{
70
- type Item = * mut A ;
70
+ type Item = NonNull < A > ;
71
71
72
72
#[ inline]
73
- fn next ( & mut self ) -> Option < * mut A >
73
+ fn next ( & mut self ) -> Option < Self :: Item >
74
74
{
75
75
let index = match self . index {
76
76
None => return None ,
77
77
Some ( ref ix) => ix. clone ( ) ,
78
78
} ;
79
79
let offset = D :: stride_offset ( & index, & self . strides ) ;
80
80
self . index = self . dim . next_for ( index) ;
81
- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
81
+ unsafe { Some ( self . ptr . offset ( offset) ) }
82
82
}
83
83
84
84
fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -88,7 +88,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
88
88
}
89
89
90
90
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
92
92
{
93
93
let ndim = self . dim . ndim ( ) ;
94
94
debug_assert_ne ! ( ndim, 0 ) ;
@@ -103,7 +103,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
103
103
let mut i = 0 ;
104
104
let i_end = len - elem_index;
105
105
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) ) ;
107
107
i += 1 ;
108
108
}
109
109
}
@@ -137,7 +137,7 @@ impl<A, D: Dimension> ExactSizeIterator for Baseiter<A, D>
137
137
impl < A > DoubleEndedIterator for Baseiter < A , Ix1 >
138
138
{
139
139
#[ inline]
140
- fn next_back ( & mut self ) -> Option < * mut A >
140
+ fn next_back ( & mut self ) -> Option < Self :: Item >
141
141
{
142
142
let index = match self . index {
143
143
None => return None ,
@@ -149,10 +149,10 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
149
149
self . index = None ;
150
150
}
151
151
152
- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
152
+ unsafe { Some ( self . ptr . offset ( offset) ) }
153
153
}
154
154
155
- fn nth_back ( & mut self , n : usize ) -> Option < * mut A >
155
+ fn nth_back ( & mut self , n : usize ) -> Option < Self :: Item >
156
156
{
157
157
let index = self . index ?;
158
158
let len = self . dim [ 0 ] - index[ 0 ] ;
@@ -162,15 +162,15 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
162
162
if index == self . dim {
163
163
self . index = None ;
164
164
}
165
- unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
165
+ unsafe { Some ( self . ptr . offset ( offset) ) }
166
166
} else {
167
167
self . index = None ;
168
168
None
169
169
}
170
170
}
171
171
172
172
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
174
174
{
175
175
let mut accum = init;
176
176
if let Some ( index) = self . index {
@@ -182,8 +182,7 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
182
182
accum = g (
183
183
accum,
184
184
self . ptr
185
- . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) )
186
- . as_ptr ( ) ,
185
+ . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) ) ,
187
186
) ;
188
187
}
189
188
}
@@ -231,7 +230,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBase<'a, A, D>
231
230
#[ inline]
232
231
fn next ( & mut self ) -> Option < & ' a A >
233
232
{
234
- self . inner . next ( ) . map ( |p| unsafe { & * p } )
233
+ self . inner . next ( ) . map ( |p| unsafe { p . as_ref ( ) } )
235
234
}
236
235
237
236
fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -242,7 +241,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBase<'a, A, D>
242
241
fn fold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
243
242
where G : FnMut ( Acc , Self :: Item ) -> Acc
244
243
{
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 ( ) ) ) }
246
245
}
247
246
}
248
247
@@ -251,13 +250,13 @@ impl<'a, A> DoubleEndedIterator for ElementsBase<'a, A, Ix1>
251
250
#[ inline]
252
251
fn next_back ( & mut self ) -> Option < & ' a A >
253
252
{
254
- self . inner . next_back ( ) . map ( |p| unsafe { & * p } )
253
+ self . inner . next_back ( ) . map ( |p| unsafe { p . as_ref ( ) } )
255
254
}
256
255
257
256
fn rfold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
258
257
where G : FnMut ( Acc , Self :: Item ) -> Acc
259
258
{
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 ( ) ) ) }
261
260
}
262
261
}
263
262
@@ -651,7 +650,7 @@ impl<'a, A, D: Dimension> Iterator for ElementsBaseMut<'a, A, D>
651
650
#[ inline]
652
651
fn next ( & mut self ) -> Option < & ' a mut A >
653
652
{
654
- self . inner . next ( ) . map ( |p| unsafe { & mut * p } )
653
+ self . inner . next ( ) . map ( |mut p| unsafe { p . as_mut ( ) } )
655
654
}
656
655
657
656
fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -662,7 +661,10 @@ impl<'a, A, D: Dimension> Iterator for ElementsBaseMut<'a, A, D>
662
661
fn fold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
663
662
where G : FnMut ( Acc , Self :: Item ) -> Acc
664
663
{
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
+ }
666
668
}
667
669
}
668
670
@@ -671,13 +673,16 @@ impl<'a, A> DoubleEndedIterator for ElementsBaseMut<'a, A, Ix1>
671
673
#[ inline]
672
674
fn next_back ( & mut self ) -> Option < & ' a mut A >
673
675
{
674
- self . inner . next_back ( ) . map ( |p| unsafe { & mut * p } )
676
+ self . inner . next_back ( ) . map ( |mut p| unsafe { p . as_mut ( ) } )
675
677
}
676
678
677
679
fn rfold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
678
680
where G : FnMut ( Acc , Self :: Item ) -> Acc
679
681
{
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
+ }
681
686
}
682
687
}
683
688
@@ -753,7 +758,7 @@ where D: Dimension
753
758
{
754
759
self . iter
755
760
. 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 ) ) } )
757
762
}
758
763
759
764
fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -777,7 +782,7 @@ impl<'a, A> DoubleEndedIterator for LanesIter<'a, A, Ix1>
777
782
{
778
783
self . iter
779
784
. 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 ) ) } )
781
786
}
782
787
}
783
788
@@ -805,7 +810,7 @@ where D: Dimension
805
810
{
806
811
self . iter
807
812
. 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 ) ) } )
809
814
}
810
815
811
816
fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -829,7 +834,7 @@ impl<'a, A> DoubleEndedIterator for LanesIterMut<'a, A, Ix1>
829
834
{
830
835
self . iter
831
836
. 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 ) ) } )
833
838
}
834
839
}
835
840
0 commit comments