Skip to content

Commit ec407a9

Browse files
committed
Make index_sizes inferable on Julia 0.7
To workaround JuliaLang/julia#22458 convert a `Size((s1, ..., sN))` into a `(Size(s1), ..., Size(sN))` and iterate over this tuple along with the `inds` tuple (by simply calling `map`).
1 parent 39eccd8 commit ec407a9

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

src/indexing.jl

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,13 @@ end
5454
## Indexing utilities ##
5555
#########################
5656

57-
@pure tail(::Type{Size{S}}) where {S} = Size{Base.tail(S)}
58-
@inline tail(::S) where {S<:Size} = tail(S)()
59-
@inline tail(s::Size{()}) = s
60-
61-
@inline index_sizes(s::Size) = ()
62-
@inline index_sizes(s::Size, ::Int, inds...) = (Size(), index_sizes(tail(s), inds...)...)
63-
@inline index_sizes(s::Size, a::StaticArray, inds...) = (Size(a), index_sizes(tail(s), inds...)...)
64-
@inline index_sizes(s::Size, ::Colon, inds...) = (Size(s[1]), index_sizes(tail(s), inds...)...)
57+
@pure unpack_size(::Type{Size{S}}) where {S} = map(Size, S)
58+
59+
@inline index_size(::Size, ::Int) = Size()
60+
@inline index_size(::Size, a::StaticArray) = Size(a)
61+
@inline index_size(s::Size, ::Colon) = s
62+
63+
@inline index_sizes(::S, inds...) where {S<:Size} = map(index_size, unpack_size(S), inds)
6564

6665
@inline index_sizes() = ()
6766
@inline index_sizes(::Int, inds...) = (Size(), index_sizes(inds...)...)

0 commit comments

Comments
 (0)