@@ -98,7 +98,32 @@ function colsupport(A::DiagTrav{<:Any,2}, _)
9898end
9999
100100
101- function getindex (A:: DiagTrav , K:: Block{1} )
101+ Base. @propagate_inbounds function getindex (A:: DiagTrav , Kk:: BlockIndex{1} )
102+ @boundscheck checkbounds (A, Kk)
103+ _diagtravgetindex (MemoryLayout (A. array), A. array, Kk)
104+ end
105+
106+ function _diagtravgetindex (_, A:: AbstractMatrix , Kk:: BlockIndex{1} )
107+ K,j = Int (block (Kk)), blockindex (Kk)
108+ m,n = size (A)
109+ j = max (0 ,K- m)+ j
110+ A[K- j+ 1 ,j]
111+ end
112+
113+ Base. @propagate_inbounds function setindex! (A:: DiagTrav , v, Kk:: BlockIndex{1} )
114+ @boundscheck checkbounds (A, Kk)
115+ _diagtravsetindex! (MemoryLayout (A. array), A. array, v, Kk)
116+ A
117+ end
118+
119+ function _diagtravsetindex! (_, A, v, Kk:: BlockIndex{1} )
120+ K,j = Int (block (Kk)), blockindex (Kk)
121+ m,n = size (A)
122+ j = max (0 ,K- m)+ j
123+ A[K- j+ 1 ,j] = v
124+ end
125+
126+ Base. @propagate_inbounds function getindex (A:: DiagTrav , K:: Block{1} )
102127 @boundscheck checkbounds (A, K)
103128 _diagtravgetindex (MemoryLayout (A. array), A. array, K)
104129end
@@ -157,6 +182,9 @@ function _diagtravgetindex(::AbstractStridedLayout, A::AbstractArray{T,3}, K::Bl
157182 ret
158183end
159184
185+ # TODO : don't build the block
186+ _diagtravgetindex (lay, A:: AbstractArray{T,3} , Kk:: BlockIndex{1} ) where T = _diagtravgetindex (lay, A, block (Kk))[blockindex (Kk)]
187+
160188getindex (A:: DiagTrav , k:: Int ) = A[findblockindex (axes (A,1 ), k)]
161189setindex! (A:: DiagTrav , v, k:: Int ) = A[findblockindex (axes (A,1 ), k)] = v
162190
0 commit comments