@@ -19,10 +19,28 @@ Base.:*(A::ArrayPartition, B::Number) = ArrayPartition((x .* B for x in A.x)...)
1919Base.:/ (A:: ArrayPartition , B:: Number ) = ArrayPartition ((x ./ B for x in A. x). .. )
2020Base.:\ (A:: Number , B:: ArrayPartition ) = ArrayPartition ((x ./ A for x in B. x). .. )
2121
22- Base. getindex ( A:: ArrayPartition , i:: Int ) = ArrayPartition ((x[i] for x in A. x). .. )
23- Base. setindex! (A:: ArrayPartition , v, i:: Int ) = ArrayPartition ((x[i]= v for x in A. x). .. )
24- Base. getindex ( A:: ArrayPartition , i:: Int... ) = ArrayPartition ((x[i... ] for x in A. x). .. )
25- Base. setindex! (A:: ArrayPartition , v, i:: Int... ) = ArrayPartition ((x[i... ]= v for x in A. x). .. )
22+ @inline function Base. getindex ( A:: ArrayPartition ,i:: Int )
23+ @boundscheck i > length (A) && throw (BoundsError (" Index out of bounds" ))
24+ @inbounds for j in 1 : length (A. x)
25+ i -= length (A. x[j])
26+ if i <= 0
27+ return A. x[j][length (A. x[j])+ i]
28+ end
29+ end
30+ end
31+ Base. getindex ( A:: ArrayPartition ,:: Colon ) = [A[i] for i in 1 : length (A)]
32+ @inline function Base. setindex! (A:: ArrayPartition , v, i:: Int )
33+ @boundscheck i > length (A) && throw (BoundsError (" Index out of bounds" ))
34+ @inbounds for j in 1 : length (A. x)
35+ i -= length (A. x[j])
36+ if i <= 0
37+ A. x[j][length (A. x[j])+ i] = v
38+ break
39+ end
40+ end
41+ end
42+ Base. getindex ( A:: ArrayPartition , i:: Int... ) = A. x[i[1 ]][Base. tail (i)... ]
43+ Base. setindex! (A:: ArrayPartition , v, i:: Int... ) = A. x[i[1 ]][Base. tail (i)... ]= v
2644
2745function recursivecopy! (A:: ArrayPartition ,B:: ArrayPartition )
2846 for (a,b) in zip (A. x,B. x)
@@ -38,6 +56,7 @@ Base.start(A::ArrayPartition) = chain(A.x...)
3856Base. next (iter:: ArrayPartition ,state) = next (state,state)
3957Base. done (iter:: ArrayPartition ,state) = done (state,state)
4058
41- Base. length (A:: ArrayPartition ) = ((length (x) for x in A. x). .. )
59+ Base. length (A:: ArrayPartition ) = sum ((length (x) for x in A. x))
60+ Base. size (A:: ArrayPartition ) = (length (A),)
4261Base. indices (A:: ArrayPartition ) = ((indices (x) for x in A. x). .. )
4362Base. eachindex (A:: ArrayPartition ) = ((indices (x) for x in A. x). .. )
0 commit comments