1
1
# This file is a part of ArraysOfArrays.jl, licensed under the MIT License (MIT).
2
2
3
3
4
- doc """
4
+ """
5
5
VectorOfArrays{T,N,M} <: AbstractVector{<:AbstractArray{T,N}}
6
6
7
7
An `VectorOfArrays` represents a vector of `N`-dimensional arrays (that may
@@ -144,6 +144,8 @@ Base.parent(A::VectorOfArrays) = A.data
144
144
145
145
Base. size (A:: VectorOfArrays ) = size (A. kernel_size)
146
146
147
+ Base. IndexStyle (A:: ArrayOfSimilarArrays ) = IndexLinear ()
148
+
147
149
148
150
Base. @propagate_inbounds function Base. getindex (A:: VectorOfArrays , i:: Integer )
149
151
@boundscheck checkbounds (A, i)
@@ -170,11 +172,11 @@ Base.@propagate_inbounds function Base._getindex(l::IndexStyle, A::VectorOfArray
170
172
A_ep = A. elem_ptr
171
173
A_data = A. data
172
174
173
- elem_ptr = similar (A_ep, length (linearindices (idxs)) + 1 )
175
+ elem_ptr = similar (A_ep, length (eachindex (idxs)) + 1 )
174
176
delta_i = firstindex (elem_ptr) - firstindex (idxs)
175
177
176
178
elem_ptr[firstindex (elem_ptr)] = firstindex (A_data)
177
- for i in linearindices (idxs)
179
+ for i in eachindex (idxs)
178
180
idx = idxs[i]
179
181
l = A_ep[idx + 1 ] - A_ep[idx]
180
182
elem_ptr[i + 1 + delta_i] = elem_ptr[i + delta_i] + l
@@ -186,7 +188,7 @@ Base.@propagate_inbounds function Base._getindex(l::IndexStyle, A::VectorOfArray
186
188
broadcast! (+ , elem_ptr, elem_ptr, firstindex (data) - first (elem_ptr))
187
189
end
188
190
189
- for i in linearindices (idxs)
191
+ for i in eachindex (idxs)
190
192
idx = idxs[i]
191
193
l = A_ep[idx + 1 ] - A_ep[idx]
192
194
@@ -210,8 +212,10 @@ Base.@propagate_inbounds function Base.setindex!(A::VectorOfArrays{T,N}, x::Abst
210
212
end
211
213
212
214
Base. length (A:: VectorOfArrays ) = length (A. kernel_size)
213
- Base. _length (A:: VectorOfArrays ) = Base. _length (A. kernel_size)
214
- Base. linearindices (A:: VectorOfArrays ) = linearindices (A. kernel_size)
215
+
216
+ @static if VERSION < v " 0.7.0-beta.250"
217
+ Base. _length (A:: VectorOfArrays ) = Base. _length (A. kernel_size)
218
+ end
215
219
216
220
217
221
function Base. append! (A:: VectorOfArrays{T,N} , B:: VectorOfArrays{U,N} ) where {T,N,U}
@@ -223,7 +227,7 @@ function Base.append!(A::VectorOfArrays{T,N}, B::VectorOfArrays{U,N}) where {T,N
223
227
idxs_B = firstindex (B_ep): (lastindex (B_ep) - 1 )
224
228
delta_ep_idx = lastindex (A_ep) + 1 - firstindex (B_ep)
225
229
delta_ep = last (A_ep) - first (B_ep)
226
- resize! (A_ep, length (linearindices (A_ep)) + length (idxs_B))
230
+ resize! (A_ep, length (eachindex (A_ep)) + length (idxs_B))
227
231
@assert checkbounds (Bool, B_ep, idxs_B)
228
232
@assert checkbounds (Bool, A_ep, broadcast (+ , idxs_B, delta_ep_idx))
229
233
@inbounds @simd for i_B in idxs_B
@@ -241,12 +245,12 @@ end
241
245
242
246
function Base. append! (A:: VectorOfArrays{T,N} , B:: AbstractVector{AbstractArray{U,N}} ) where {T,N,U}
243
247
if ! isempty (B)
244
- n_A = length (linearindices (A))
245
- n_B = length (linearindices (B))
246
- datalen_A = length (linearindices (A. data))
248
+ n_A = length (eachindex (A))
249
+ n_B = length (eachindex (B))
250
+ datalen_A = length (eachindex (A. data))
247
251
datalen_B = zero (Int)
248
252
for i in eachindex (B)
249
- datalen_B += Int (length (linearindices (B[i])))
253
+ datalen_B += Int (length (eachindex (B[i])))
250
254
end
251
255
252
256
sizehint! (A. data, datalen_A + datalen_B)
0 commit comments