@@ -12,10 +12,10 @@ use std::mem::MaybeUninit;
1212
1313use crate :: imp_prelude:: * ;
1414
15- use crate :: { Baseiter , ElementsBase , ElementsBaseMut , Iter , IterMut } ;
16-
1715use crate :: dimension:: offset_from_low_addr_ptr_to_logical_ptr;
18- use crate :: iter:: { self , AxisIter , AxisIterMut } ;
16+ use crate :: iter:: { self , Iter , IterMut , AxisIter , AxisIterMut } ;
17+ use crate :: iterators:: base:: { Baseiter , ElementsBase , ElementsBaseMut , OrderOption , PreserveOrder ,
18+ ArbitraryOrder , NoOptimization } ;
1919use crate :: math_cell:: MathCell ;
2020use crate :: IndexLonger ;
2121
@@ -188,14 +188,25 @@ impl<'a, A, D> ArrayView<'a, A, D>
188188where
189189 D : Dimension ,
190190{
191+ /// Create a base iter fromt the view with the given order option
192+ #[ inline]
193+ pub ( crate ) fn into_base_iter < F : OrderOption > ( self ) -> Baseiter < A , D > {
194+ unsafe { Baseiter :: new_with_order :: < F > ( self . ptr . as_ptr ( ) , self . dim , self . strides ) }
195+ }
196+
197+ #[ inline]
198+ pub ( crate ) fn into_elements_base_keep_dims ( self ) -> ElementsBase < ' a , A , D > {
199+ ElementsBase :: new :: < NoOptimization > ( self )
200+ }
201+
191202 #[ inline]
192- pub ( crate ) fn into_base_iter ( self ) -> Baseiter < A , D > {
193- unsafe { Baseiter :: new ( self . ptr . as_ptr ( ) , self . dim , self . strides ) }
203+ pub ( crate ) fn into_elements_base_preserve_order ( self ) -> ElementsBase < ' a , A , D > {
204+ ElementsBase :: new :: < PreserveOrder > ( self )
194205 }
195206
196207 #[ inline]
197- pub ( crate ) fn into_elements_base ( self ) -> ElementsBase < ' a , A , D > {
198- ElementsBase :: new ( self )
208+ pub ( crate ) fn into_elements_base_any_order ( self ) -> ElementsBase < ' a , A , D > {
209+ ElementsBase :: new :: < ArbitraryOrder > ( self )
199210 }
200211
201212 pub ( crate ) fn into_iter_ ( self ) -> Iter < ' a , A , D > {
@@ -227,16 +238,28 @@ where
227238 unsafe { RawArrayViewMut :: new ( self . ptr , self . dim , self . strides ) }
228239 }
229240
241+ /// Create a base iter fromt the view with the given order option
230242 #[ inline]
231- pub ( crate ) fn into_base_iter ( self ) -> Baseiter < A , D > {
232- unsafe { Baseiter :: new ( self . ptr . as_ptr ( ) , self . dim , self . strides ) }
243+ pub ( crate ) fn into_base_iter < F : OrderOption > ( self ) -> Baseiter < A , D > {
244+ unsafe { Baseiter :: new_with_order :: < F > ( self . ptr . as_ptr ( ) , self . dim , self . strides ) }
233245 }
234246
235247 #[ inline]
236- pub ( crate ) fn into_elements_base ( self ) -> ElementsBaseMut < ' a , A , D > {
237- ElementsBaseMut :: new ( self )
248+ pub ( crate ) fn into_elements_base_keep_dims ( self ) -> ElementsBaseMut < ' a , A , D > {
249+ ElementsBaseMut :: new :: < NoOptimization > ( self )
238250 }
239251
252+ #[ inline]
253+ pub ( crate ) fn into_elements_base_preserve_order ( self ) -> ElementsBaseMut < ' a , A , D > {
254+ ElementsBaseMut :: new :: < PreserveOrder > ( self )
255+ }
256+
257+ #[ inline]
258+ pub ( crate ) fn into_elements_base_any_order ( self ) -> ElementsBaseMut < ' a , A , D > {
259+ ElementsBaseMut :: new :: < ArbitraryOrder > ( self )
260+ }
261+
262+
240263 /// Return the array’s data as a slice, if it is contiguous and in standard order.
241264 /// Otherwise return self in the Err branch of the result.
242265 pub ( crate ) fn try_into_slice ( self ) -> Result < & ' a mut [ A ] , Self > {
0 commit comments