Skip to content

Commit b5afb2f

Browse files
authored
Return array in setindex (#331)
1 parent 299ecb6 commit b5afb2f

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

src/abstractblockarray.jl

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,26 @@ false
159159

160160
@propagate_inbounds setindex!(block_arr::AbstractBlockArray{T,N}, v, block::Block{N}) where {T,N} =
161161
setindex!(block_arr, v, Block.(block.n)...)
162-
@inline @propagate_inbounds function setindex!(block_arr::AbstractBlockArray{T,N}, v, block::Vararg{Block{1}, N}) where {T,N}
162+
@propagate_inbounds function setindex!(block_arr::AbstractBlockArray{T,N}, v, block::Vararg{Block{1}, N}) where {T,N}
163163
blockcheckbounds(block_arr, block...)
164164
dest = view(block_arr, block...)
165165
size(dest) == size(v) || throw(DimensionMismatch(string("tried to assign $(size(v)) array to $(size(dest)) block")))
166166
copyto!(dest, v)
167167
block_arr
168168
end
169169

170-
@inline @propagate_inbounds setindex!(block_arr::AbstractBlockArray{T,N}, v, blockindex::BlockIndex{N}) where {T,N} =
170+
@propagate_inbounds function setindex!(block_arr::AbstractBlockArray{T,N}, v, blockindex::BlockIndex{N}) where {T,N}
171171
view(block_arr, block(blockindex))[blockindex.α...] = v
172-
@inline @propagate_inbounds setindex!(block_arr::AbstractBlockVector{T}, v, blockindex::BlockIndex{1}) where {T} =
172+
block_arr
173+
end
174+
@propagate_inbounds function setindex!(block_arr::AbstractBlockVector{T}, v, blockindex::BlockIndex{1}) where {T}
173175
view(block_arr, block(blockindex))[blockindex.α...] = v
174-
@inline @propagate_inbounds setindex!(block_arr::AbstractBlockArray{T,N}, v, blockindex::Vararg{BlockIndex{1},N}) where {T,N} =
176+
block_arr
177+
end
178+
@propagate_inbounds function setindex!(block_arr::AbstractBlockArray{T,N}, v, blockindex::Vararg{BlockIndex{1},N}) where {T,N}
175179
block_arr[BlockIndex(blockindex)] = v
180+
block_arr
181+
end
176182

177183
viewblock(block_arr, block) = Base.invoke(view, Tuple{AbstractArray, Any}, block_arr, block)
178184
@inline view(block_arr::AbstractBlockArray{<:Any,N}, block::Block{N}) where N = viewblock(block_arr, block)
@@ -181,7 +187,7 @@ viewblock(block_arr, block) = Base.invoke(view, Tuple{AbstractArray, Any}, block
181187
view(block_arr, blkind)
182188
end
183189
@inline view(block_arr::AbstractBlockVector, block::Block{1}) = viewblock(block_arr, block)
184-
@inline @propagate_inbounds view(block_arr::AbstractBlockArray, block::Block{1}...) = view(block_arr, Block(block))
190+
@propagate_inbounds view(block_arr::AbstractBlockArray, block::Block{1}...) = view(block_arr, Block(block))
185191

186192
"""
187193
eachblock(A::AbstractBlockArray)

src/blocks.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,10 @@ This is broken for now. See: https://github.com/JuliaArrays/BlockArrays.jl/issue
8888
# IndexCartesian implementations
8989
@propagate_inbounds getindex(a::BlocksView{T,N}, i::Vararg{Int,N}) where {T,N} =
9090
view(a.array, Block.(i)...)
91-
@propagate_inbounds setindex!(a::BlocksView{T,N}, b, i::Vararg{Int,N}) where {T,N} =
91+
@propagate_inbounds function setindex!(a::BlocksView{T,N}, b, i::Vararg{Int,N}) where {T,N}
9292
copyto!(a[i...], b)
93+
a
94+
end
9395

9496
function Base.showarg(io::IO, a::BlocksView, toplevel::Bool)
9597
if toplevel

src/pseudo_blockarray.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,10 @@ to_axes(n::Integer) = Base.oneto(n)
225225
PseudoBlockArray{T}(undef, map(to_axes,axes))
226226

227227
@propagate_inbounds getindex(block_arr::PseudoBlockArray{T, N}, i::Vararg{Integer, N}) where {T,N} = block_arr.blocks[i...]
228-
@propagate_inbounds setindex!(block_arr::PseudoBlockArray{T, N}, v, i::Vararg{Integer, N}) where {T,N} = setindex!(block_arr.blocks, v, i...)
228+
@propagate_inbounds function setindex!(block_arr::PseudoBlockArray{T, N}, v, i::Vararg{Integer, N}) where {T,N}
229+
setindex!(block_arr.blocks, v, i...)
230+
block_arr
231+
end
229232

230233
################################
231234
# AbstractBlockArray Interface #

0 commit comments

Comments
 (0)