256
256
# If the result is one-dimensional and it's a Colon, then linear
257
257
# indexing uses the indices along the given dimension. Otherwise
258
258
# linear indexing always starts with 1.
259
- compute_offset1 (parent, stride1:: Integer , I:: Tuple ) = (@_inline_meta ; compute_offset1 (parent, stride1, find_extended_dims (I)... , I))
260
- compute_offset1 (parent, stride1:: Integer , dims:: Tuple{Int} , inds:: Tuple{Colon} , I:: Tuple ) = (@_inline_meta ; compute_linindex (parent, I) - stride1* first (indices (parent, dims[1 ]))) # index-preserving case
261
- compute_offset1 (parent, stride1:: Integer , dims, inds, I:: Tuple ) = (@_inline_meta ; compute_linindex (parent, I) - stride1) # linear indexing starts with 1
259
+ compute_offset1 (parent, stride1:: Integer , I:: Tuple ) =
260
+ (@_inline_meta ; compute_offset1 (parent, stride1, find_extended_dims (I)... , I))
261
+ compute_offset1 (parent, stride1:: Integer , dims:: Tuple{Int} , inds:: Tuple{Colon} , I:: Tuple ) =
262
+ (@_inline_meta ; compute_linindex (parent, I) - stride1* first (indices (parent, dims[1 ]))) # index-preserving case
263
+ compute_offset1 (parent, stride1:: Integer , dims, inds, I:: Tuple ) =
264
+ (@_inline_meta ; compute_linindex (parent, I) - stride1) # linear indexing starts with 1
262
265
263
266
function compute_linindex {N} (parent, I:: NTuple{N} )
264
267
@_inline_meta
@@ -283,10 +286,13 @@ end
283
286
compute_linindex (f, s, IP:: Tuple , I:: Tuple{} ) = f
284
287
285
288
find_extended_dims (I) = (@_inline_meta ; _find_extended_dims ((), (), 1 , I... ))
286
- _find_extended_dims (dims, inds, dim) = (@_inline_meta ; return (dims, inds));
287
- _find_extended_dims (dims, inds, dim, :: Real , I... ) = (@_inline_meta ; _find_extended_dims (dims, inds, dim+ 1 , I... ))
288
- _find_extended_dims (dims, inds, dim, i1:: AbstractCartesianIndex , I... ) = (@_inline_meta ; _find_extended_dims (dims, inds, dim, i1. I... , I... ))
289
- _find_extended_dims (dims, inds, dim, i1, I... ) = (@_inline_meta ; _find_extended_dims ((dims... , dim), (inds... , i1), dim+ 1 , I... ))
289
+ _find_extended_dims (dims, inds, dim) = (@_inline_meta ; return (dims, inds))
290
+ _find_extended_dims (dims, inds, dim, :: Real , I... ) =
291
+ (@_inline_meta ; _find_extended_dims (dims, inds, dim+ 1 , I... ))
292
+ _find_extended_dims (dims, inds, dim, i1:: AbstractCartesianIndex , I... ) =
293
+ (@_inline_meta ; _find_extended_dims (dims, inds, dim, i1. I... , I... ))
294
+ _find_extended_dims (dims, inds, dim, i1, I... ) =
295
+ (@_inline_meta ; _find_extended_dims ((dims... , dim), (inds... , i1), dim+ 1 , I... ))
290
296
291
297
unsafe_convert {T,N,P,I<:Tuple{Vararg{RangeIndex}}} (:: Type{Ptr{T}} , V:: SubArray{T,N,P,I} ) =
292
298
unsafe_convert (Ptr{T}, V. parent) + (first_index (V)- 1 )* sizeof (T)
0 commit comments