Skip to content

Commit 72c5545

Browse files
committed
Ensure that ArrayLS and ArrayLSLS really are LinearSlow
1 parent d5689b5 commit 72c5545

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/array/sumindex.jl

+17-4
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,26 @@ end
147147

148148
ArrayStrides1(A::Array) = ArrayStrides1(A, size(A,1))
149149

150-
Base.similar{T}(A::ArrayLSLS, ::Type{T}, dims::Tuple{Vararg{Int}}) = ArrayLSLS(similar(A.data, T, dims))
151-
152150
@inline Base.setindex!(A::ArrayLSLS, v, I::Int...) = A.data[I...] = v
153151

154152
@inline Base.unsafe_setindex!(A::ArrayLSLS, v, I::Int...) = Base.unsafe_setindex!(A.data, v, I...)
155153

156154
Base.first(A::ArrayLSLS) = first(A.data)
157155

158156
Base.size(A::MyArray) = size(A.data)
157+
# To ensure that ArrayLS and ArrayLSLS really are LinearSlow even
158+
# after inlining, let's make the size differ from the parent array
159+
# (ref https://github.com/JuliaLang/julia/pull/17355#issuecomment-231748251)
160+
@inline Base.size{T}(A::ArrayLS{T,1}) = (sz = size(A.data); (sz[1]-1,))
161+
@inline Base.size{T}(A::ArrayLSLS{T,1}) = (sz = size(A.data); (sz[1]-1,))
162+
@inline Base.size{T}(A::ArrayLS{T,2}) = (sz = size(A.data); (sz[1]-1,sz[2]-1))
163+
@inline Base.size{T}(A::ArrayLSLS{T,2}) = (sz = size(A.data); (sz[1]-1,sz[2]-1))
164+
@inline Base.size(A::ArrayLS) = map(n->n-1, size(A.data))
165+
@inline Base.size(A::ArrayLSLS) = map(n->n-1, size(A.data))
166+
167+
@inline Base.similar{T}(A::ArrayLSLS, ::Type{T}, dims::Tuple{Int}) = ArrayLSLS(similar(A.data, T, (dims[1]+1,)))
168+
@inline Base.similar{T}(A::ArrayLSLS, ::Type{T}, dims::Tuple{Int,Int}) = ArrayLSLS(similar(A.data, T, (dims[1]+1,dims[2]+1)))
169+
@inline Base.similar{T}(A::ArrayLSLS, ::Type{T}, dims::Tuple{Vararg{Int}}) = ArrayLSLS(similar(A.data, T, map(n->n+1, dims)))
159170

160171
@inline Base.getindex(A::ArrayLF, i::Int) = getindex(A.data, i)
161172
@inline Base.getindex(A::ArrayLF, i::Int, i2::Int) = getindex(A.data, i, i2)
@@ -181,8 +192,10 @@ end
181192

182193
function makearrays{T}(::Type{T}, r::Integer, c::Integer)
183194
A = samerand(T, r, c)
184-
AS = ArrayLS(A)
185-
ASS = ArrayLSLS(A)
195+
B = similar(A, r+1, c+1)
196+
B[1:r, 1:c] = A
197+
AS = ArrayLS(B)
198+
ASS = ArrayLSLS(B)
186199
AF = ArrayLF(A)
187200
Astrd = ArrayStrides(A)
188201
Astrd1 = ArrayStrides1(A)

0 commit comments

Comments
 (0)