@@ -19,6 +19,10 @@ use alloc::vec::Vec;
1919use std:: iter:: FromIterator ;
2020use std:: marker:: PhantomData ;
2121use std:: ptr;
22+ use std:: ptr:: NonNull ;
23+
24+ #[ allow( unused_imports) ] // Needed for Rust 1.64
25+ use rawpointer:: PointerExt ;
2226
2327use crate :: Ix1 ;
2428
@@ -38,7 +42,7 @@ use std::slice::{self, Iter as SliceIter, IterMut as SliceIterMut};
3842#[ derive( Debug ) ]
3943pub struct Baseiter < A , D >
4044{
41- ptr : * mut A ,
45+ ptr : NonNull < A > ,
4246 dim : D ,
4347 strides : D ,
4448 index : Option < D > ,
@@ -50,7 +54,7 @@ impl<A, D: Dimension> Baseiter<A, D>
5054 /// to be correct to avoid performing an unsafe pointer offset while
5155 /// iterating.
5256 #[ inline]
53- pub unsafe fn new ( ptr : * mut A , len : D , stride : D ) -> Baseiter < A , D >
57+ pub unsafe fn new ( ptr : NonNull < A > , len : D , stride : D ) -> Baseiter < A , D >
5458 {
5559 Baseiter {
5660 ptr,
@@ -74,7 +78,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
7478 } ;
7579 let offset = D :: stride_offset ( & index, & self . strides ) ;
7680 self . index = self . dim . next_for ( index) ;
77- unsafe { Some ( self . ptr . offset ( offset) ) }
81+ unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
7882 }
7983
8084 fn size_hint ( & self ) -> ( usize , Option < usize > )
@@ -99,7 +103,7 @@ impl<A, D: Dimension> Iterator for Baseiter<A, D>
99103 let mut i = 0 ;
100104 let i_end = len - elem_index;
101105 while i < i_end {
102- accum = g ( accum, row_ptr. offset ( i as isize * stride) ) ;
106+ accum = g ( accum, row_ptr. offset ( i as isize * stride) . as_ptr ( ) ) ;
103107 i += 1 ;
104108 }
105109 }
@@ -140,12 +144,12 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
140144 Some ( ix) => ix,
141145 } ;
142146 self . dim [ 0 ] -= 1 ;
143- let offset = < _ > :: stride_offset ( & self . dim , & self . strides ) ;
147+ let offset = Ix1 :: stride_offset ( & self . dim , & self . strides ) ;
144148 if index == self . dim {
145149 self . index = None ;
146150 }
147151
148- unsafe { Some ( self . ptr . offset ( offset) ) }
152+ unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
149153 }
150154
151155 fn nth_back ( & mut self , n : usize ) -> Option < * mut A >
@@ -154,11 +158,11 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
154158 let len = self . dim [ 0 ] - index[ 0 ] ;
155159 if n < len {
156160 self . dim [ 0 ] -= n + 1 ;
157- let offset = < _ > :: stride_offset ( & self . dim , & self . strides ) ;
161+ let offset = Ix1 :: stride_offset ( & self . dim , & self . strides ) ;
158162 if index == self . dim {
159163 self . index = None ;
160164 }
161- unsafe { Some ( self . ptr . offset ( offset) ) }
165+ unsafe { Some ( self . ptr . offset ( offset) . as_ptr ( ) ) }
162166 } else {
163167 self . index = None ;
164168 None
@@ -178,7 +182,8 @@ impl<A> DoubleEndedIterator for Baseiter<A, Ix1>
178182 accum = g (
179183 accum,
180184 self . ptr
181- . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) ) ,
185+ . offset ( Ix1 :: stride_offset ( & self . dim , & self . strides ) )
186+ . as_ptr ( ) ,
182187 ) ;
183188 }
184189 }
0 commit comments