@@ -158,20 +158,17 @@ macro_rules! componentwise_binop_impl(
158158
159159 // This is the most common case and should be deduced at compile-time.
160160 // TODO: use specialization instead?
161- if self . data . is_contiguous ( ) && rhs . data . is_contiguous ( ) && out . data . is_contiguous ( ) {
162- let arr1 = self . data. as_slice ( ) ;
163- let arr2 = rhs . data. as_slice ( ) ;
164- let out = out . data. as_mut_slice ( ) ;
165- for i in 0 .. arr1 . len ( ) {
166- unsafe {
161+ unsafe {
162+ if self . data . is_contiguous ( ) && rhs . data. is_contiguous ( ) && out . data . is_contiguous ( ) {
163+ let arr1 = self . data. as_slice_unchecked ( ) ;
164+ let arr2 = rhs . data. as_slice_unchecked ( ) ;
165+ let out = out . data . as_mut_slice_unchecked ( ) ;
166+ for i in 0 .. arr1 . len ( ) {
167167 * out. get_unchecked_mut( i) = arr1. get_unchecked( i) . inlined_clone( ) . $method( arr2. get_unchecked( i) . inlined_clone( ) ) ;
168168 }
169- }
170- }
171- else {
172- for j in 0 .. self . ncols( ) {
173- for i in 0 .. self . nrows( ) {
174- unsafe {
169+ } else {
170+ for j in 0 .. self . ncols( ) {
171+ for i in 0 .. self . nrows( ) {
175172 let val = self . get_unchecked( ( i, j) ) . inlined_clone( ) . $method( rhs. get_unchecked( ( i, j) ) . inlined_clone( ) ) ;
176173 * out. get_unchecked_mut( ( i, j) ) = val;
177174 }
@@ -191,19 +188,17 @@ macro_rules! componentwise_binop_impl(
191188
192189 // This is the most common case and should be deduced at compile-time.
193190 // TODO: use specialization instead?
194- if self . data. is_contiguous( ) && rhs. data. is_contiguous( ) {
195- let arr1 = self . data. as_mut_slice( ) ;
196- let arr2 = rhs. data. as_slice( ) ;
197- for i in 0 .. arr2. len( ) {
198- unsafe {
191+ unsafe {
192+ if self . data. is_contiguous( ) && rhs. data. is_contiguous( ) {
193+ let arr1 = self . data. as_mut_slice_unchecked( ) ;
194+ let arr2 = rhs. data. as_slice_unchecked( ) ;
195+
196+ for i in 0 .. arr2. len( ) {
199197 arr1. get_unchecked_mut( i) . $method_assign( arr2. get_unchecked( i) . inlined_clone( ) ) ;
200198 }
201- }
202- }
203- else {
204- for j in 0 .. rhs. ncols( ) {
205- for i in 0 .. rhs. nrows( ) {
206- unsafe {
199+ } else {
200+ for j in 0 .. rhs. ncols( ) {
201+ for i in 0 .. rhs. nrows( ) {
207202 self . get_unchecked_mut( ( i, j) ) . $method_assign( rhs. get_unchecked( ( i, j) ) . inlined_clone( ) )
208203 }
209204 }
@@ -221,20 +216,18 @@ macro_rules! componentwise_binop_impl(
221216
222217 // This is the most common case and should be deduced at compile-time.
223218 // TODO: use specialization instead?
224- if self . data. is_contiguous( ) && rhs. data. is_contiguous( ) {
225- let arr1 = self . data. as_slice( ) ;
226- let arr2 = rhs. data. as_mut_slice( ) ;
227- for i in 0 .. arr1. len( ) {
228- unsafe {
219+ unsafe {
220+ if self . data. is_contiguous( ) && rhs. data. is_contiguous( ) {
221+ let arr1 = self . data. as_slice_unchecked( ) ;
222+ let arr2 = rhs. data. as_mut_slice_unchecked( ) ;
223+
224+ for i in 0 .. arr1. len( ) {
229225 let res = arr1. get_unchecked( i) . inlined_clone( ) . $method( arr2. get_unchecked( i) . inlined_clone( ) ) ;
230226 * arr2. get_unchecked_mut( i) = res;
231227 }
232- }
233- }
234- else {
235- for j in 0 .. self . ncols( ) {
236- for i in 0 .. self . nrows( ) {
237- unsafe {
228+ } else {
229+ for j in 0 .. self . ncols( ) {
230+ for i in 0 .. self . nrows( ) {
238231 let r = rhs. get_unchecked_mut( ( i, j) ) ;
239232 * r = self . get_unchecked( ( i, j) ) . inlined_clone( ) . $method( r. inlined_clone( ) )
240233 }
0 commit comments