@@ -25,7 +25,8 @@ DiskArrays.batchstrategy(a::AccessCountDiskArray) = a.batchstrategy
2525AccessCountDiskArray (a; chunksize= size (a), batchstrategy= DiskArrays. ChunkRead (DiskArrays. NoStepRange (), 0.5 )) =
2626 AccessCountDiskArray ([], [], a, chunksize, batchstrategy)
2727
28- Base. size (a:: AccessCountDiskArray ) = size (a. parent)
28+ Base. parent (a:: AccessCountDiskArray ) = a. parent
29+ Base. size (a:: AccessCountDiskArray ) = size (parent (a))
2930
3031# Apply the all in one macro rather than inheriting
3132
@@ -38,7 +39,7 @@ function DiskArrays.readblock!(a::AccessCountDiskArray, aout, i::OrdinalRange...
3839 end
3940 # println("reading from indices ", join(string.(i)," "))
4041 push! (a. getindex_log, i)
41- return aout .= a . parent[i... ]
42+ return aout .= parent (a) [i... ]
4243end
4344function DiskArrays. writeblock! (a:: AccessCountDiskArray , v, i:: OrdinalRange... )
4445 ndims (a) == length (i) || error (" Number of indices is not correct" )
@@ -47,31 +48,30 @@ function DiskArrays.writeblock!(a::AccessCountDiskArray, v, i::OrdinalRange...)
4748 end
4849 # println("Writing to indices ", join(string.(i)," "))
4950 push! (a. setindex_log, i)
50- return view (a . parent, i... ) .= v
51+ return view (parent (a) , i... ) .= v
5152end
5253
5354getindex_count (a:: AccessCountDiskArray ) = length (a. getindex_log)
5455setindex_count (a:: AccessCountDiskArray ) = length (a. setindex_log)
5556getindex_log (a:: AccessCountDiskArray ) = a. getindex_log
5657setindex_log (a:: AccessCountDiskArray ) = a. setindex_log
57- trueparent (a:: AccessCountDiskArray ) = a. parent
58-
59- getindex_count (a:: DiskArrays.ReshapedDiskArray ) = getindex_count (a. parent)
60- setindex_count (a:: DiskArrays.ReshapedDiskArray ) = setindex_count (a. parent)
61- getindex_log (a:: DiskArrays.ReshapedDiskArray ) = getindex_log (a. parent)
62- setindex_log (a:: DiskArrays.ReshapedDiskArray ) = setindex_log (a. parent)
63- trueparent (a:: DiskArrays.ReshapedDiskArray ) = trueparent (a. parent)
64-
65- getindex_count (a:: DiskArrays.PermutedDiskArray ) = getindex_count (a. a. parent)
66- setindex_count (a:: DiskArrays.PermutedDiskArray ) = setindex_count (a. a. parent)
67- getindex_log (a:: DiskArrays.PermutedDiskArray ) = getindex_log (a. a. parent)
68- setindex_log (a:: DiskArrays.PermutedDiskArray ) = setindex_log (a. a. parent)
69- function trueparent (
70- a:: DiskArrays.PermutedDiskArray{T,N,<:PermutedDimsArray{T,N,perm,iperm}}
71- ) where {T,N,perm,iperm}
72- return permutedims (trueparent (a. a. parent), perm)
58+ trueparent (a:: AccessCountDiskArray ) = parent (a)
59+
60+ getindex_count (a:: DiskArrays.AbstractDiskArray ) = getindex_count (parent (a))
61+ setindex_count (a:: DiskArrays.AbstractDiskArray ) = setindex_count (parent (a))
62+ getindex_log (a:: DiskArrays.AbstractDiskArray ) = getindex_log (parent (a))
63+ setindex_log (a:: DiskArrays.AbstractDiskArray ) = setindex_log (parent (a))
64+ function trueparent (a:: DiskArrays.AbstractDiskArray )
65+ if parent (a) === a
66+ a
67+ else
68+ trueparent (parent (a))
69+ end
7370end
7471
72+ trueparent (a:: DiskArrays.PermutedDiskArray{T,N,perm,iperm} ) where {T,N,perm,iperm} =
73+ permutedims (trueparent (parent (a)), perm)
74+
7575"""
7676 ChunkedDiskArray(A; chunksize)
7777
@@ -83,29 +83,31 @@ struct ChunkedDiskArray{T,N,A<:AbstractArray{T,N}} <: DiskArrays.AbstractDiskArr
8383end
8484ChunkedDiskArray (a; chunksize= size (a)) = ChunkedDiskArray (a, chunksize)
8585
86- Base. size (a:: ChunkedDiskArray ) = size (a. parent)
86+ Base. parent (a:: ChunkedDiskArray ) = a. parent
87+ Base. size (a:: ChunkedDiskArray ) = size (parent (a))
8788
8889DiskArrays. haschunks (:: ChunkedDiskArray ) = DiskArrays. Chunked ()
8990DiskArrays. eachchunk (a:: ChunkedDiskArray ) = DiskArrays. GridChunks (a, a. chunksize)
90- DiskArrays. readblock! (a:: ChunkedDiskArray , aout, i:: AbstractUnitRange... ) = aout .= a . parent[i... ]
91- DiskArrays. writeblock! (a:: ChunkedDiskArray , v, i:: AbstractUnitRange... ) = view (a . parent, i... ) .= v
91+ DiskArrays. readblock! (a:: ChunkedDiskArray , aout, i:: AbstractUnitRange... ) = aout .= parent (a) [i... ]
92+ DiskArrays. writeblock! (a:: ChunkedDiskArray , v, i:: AbstractUnitRange... ) = view (parent (a) , i... ) .= v
9293
9394"""
9495 UnchunkedDiskArray(A)
9596
9697A disk array without chunking, that can wrap any other `AbstractArray`.
9798"""
9899struct UnchunkedDiskArray{T,N,P<: AbstractArray{T,N} } <: DiskArrays.AbstractDiskArray{T,N}
99- p :: P
100+ parent :: P
100101end
101102
102- Base. size (a:: UnchunkedDiskArray ) = size (a. p)
103+ Base. parent (a:: UnchunkedDiskArray ) = a. parent
104+ Base. size (a:: UnchunkedDiskArray ) = size (parent (a))
103105
104106DiskArrays. haschunks (:: UnchunkedDiskArray ) = DiskArrays. Unchunked ()
105107function DiskArrays. readblock! (a:: UnchunkedDiskArray , aout, i:: AbstractUnitRange... )
106108 ndims (a) == length (i) || error (" Number of indices is not correct" )
107109 all (r -> isa (r, AbstractUnitRange), i) || error (" Not all indices are unit ranges" )
108- return aout .= a . p [i... ]
110+ return aout .= parent (a) [i... ]
109111end
110112
111113end
0 commit comments