From 8a70e1379b92ebddc8d1dabbc938d6994395f242 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Sun, 28 Aug 2016 08:26:19 -0500 Subject: [PATCH] Speed up indices for SubArray --- base/subarray.jl | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/base/subarray.jl b/base/subarray.jl index 1f1be5b260a72..a675fd75ebd37 100644 --- a/base/subarray.jl +++ b/base/subarray.jl @@ -273,11 +273,20 @@ end # they are taken from the range/vector # Since bounds-checking is performance-critical and uses # indices, it's worth optimizing these implementations thoroughly -indices(S::SubArray) = (@_inline_pure_meta; _indices_sub(S, indices(S.parent), S.indexes...)) +indices(S::SubArray) = (@_inline_meta; _indices_sub(S, indices(S.parent), S.indexes...)) _indices_sub(S::SubArray, pinds) = () -_indices_sub(S::SubArray, pinds, ::Real, I...) = _indices_sub(S, tail(pinds), I...) -_indices_sub(S::SubArray, pinds, ::Colon, I...) = (pinds[1], _indices_sub(S, tail(pinds), I...)...) -_indices_sub(S::SubArray, pinds, i1::AbstractArray, I...) = (unsafe_indices(i1)..., _indices_sub(S, tail(pinds), I...)...) +function _indices_sub(S::SubArray, pinds, ::Real, I...) + @_inline_meta + _indices_sub(S, tail(pinds), I...) +end +function _indices_sub(S::SubArray, pinds, ::Colon, I...) + @_inline_meta + (pinds[1], _indices_sub(S, tail(pinds), I...)...) +end +function _indices_sub(S::SubArray, pinds, i1::AbstractArray, I...) + @_inline_meta + (unsafe_indices(i1)..., _indices_sub(S, tail(pinds), I...)...) +end ## Compatability # deprecate?