@@ -147,15 +147,26 @@ end
147
147
148
148
ArrayStrides1 (A:: Array ) = ArrayStrides1 (A, size (A,1 ))
149
149
150
- Base. similar {T} (A:: ArrayLSLS , :: Type{T} , dims:: Tuple{Vararg{Int}} ) = ArrayLSLS (similar (A. data, T, dims))
151
-
152
150
@inline Base. setindex! (A:: ArrayLSLS , v, I:: Int... ) = A. data[I... ] = v
153
151
154
152
@inline Base. unsafe_setindex! (A:: ArrayLSLS , v, I:: Int... ) = Base. unsafe_setindex! (A. data, v, I... )
155
153
156
154
Base. first (A:: ArrayLSLS ) = first (A. data)
157
155
158
156
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)))
159
170
160
171
@inline Base. getindex (A:: ArrayLF , i:: Int ) = getindex (A. data, i)
161
172
@inline Base. getindex (A:: ArrayLF , i:: Int , i2:: Int ) = getindex (A. data, i, i2)
181
192
182
193
function makearrays {T} (:: Type{T} , r:: Integer , c:: Integer )
183
194
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)
186
199
AF = ArrayLF (A)
187
200
Astrd = ArrayStrides (A)
188
201
Astrd1 = ArrayStrides1 (A)
0 commit comments