@@ -98,7 +98,32 @@ function colsupport(A::DiagTrav{<:Any,2}, _)
98
98
end
99
99
100
100
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} )
102
127
@boundscheck checkbounds (A, K)
103
128
_diagtravgetindex (MemoryLayout (A. array), A. array, K)
104
129
end
@@ -157,6 +182,9 @@ function _diagtravgetindex(::AbstractStridedLayout, A::AbstractArray{T,3}, K::Bl
157
182
ret
158
183
end
159
184
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
+
160
188
getindex (A:: DiagTrav , k:: Int ) = A[findblockindex (axes (A,1 ), k)]
161
189
setindex! (A:: DiagTrav , v, k:: Int ) = A[findblockindex (axes (A,1 ), k)] = v
162
190
0 commit comments