Skip to content

Commit 51695d1

Browse files
committed
Cache getindex special for zeros
1 parent 6786eea commit 51695d1

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/cache.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ replace_in_print_matrix(A::CachedMatrix, i::Integer, j::Integer, s::AbstractStri
163163
###
164164

165165
zero!(A::CachedArray{<:Any,N,<:Any,<:Zeros}) where N = zero!(A.data)
166+
function getindex(A::CachedVector{T,<:AbstractVector,<:AbstractFill{<:Any,1}}, I::AbstractVector) where T
167+
@boundscheck checkbounds(A, I)
168+
CachedArray(A.data[I OneTo(A.datasize[1])], A.array[OneTo(length(I))])
169+
end
166170

167171
###
168172
# MemoryLayout

test/runtests.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,17 @@ end
234234
@test f.(x , s) isa CachedArray
235235
@test f.(x , s) == f.(Vector(x), Vector(s))
236236
end
237+
238+
@testset "padded CachedVector getindex" begin
239+
v = CachedArray([1,2,3],Zeros{Int}(1000))
240+
@test v[3:100] == [3; zeros(Int,97)]
241+
@test v[3:100] isa CachedArray{Int,1,Vector{Int},Zeros{Int,1,Tuple{Base.OneTo{Int}}}}
242+
@test v[4:end] isa CachedArray{Int,1,Vector{Int},Zeros{Int,1,Tuple{Base.OneTo{Int}}}}
243+
@test all(iszero,v[4:end])
244+
@test isempty(v[4:0])
245+
v = CachedArray([1,2,3],Fill{Int}(1,1000))
246+
@test v[3:100] == [3; ones(97)]
247+
end
237248
end
238249

239250
@testset "Diff and Cumsum" begin

0 commit comments

Comments
 (0)