Skip to content

Commit c900f07

Browse files
add abstract types
1 parent f8ce649 commit c900f07

2 files changed

Lines changed: 37 additions & 24 deletions

File tree

src/permute.jl

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,52 @@
11
"""
2-
PermutedDiskArray <: AbstractDiskArray
2+
AbstractPermutedDiskArray <: AbstractDiskArray
3+
4+
Abstract supertype for diskarray with permuted dimensions.
5+
"""
6+
abstract type AbstractPermutedDiskArray{T,N,P<:PermutedDimsArray{T,N}} <: AbstractDiskArray{T,N} end
7+
8+
"""
9+
PermutedDiskArray <: AbstractPermutedDiskArray
310
411
A lazily permuted disk array returned by `permutedims(diskarray, permutation)`.
512
"""
6-
struct PermutedDiskArray{T,N,P<:PermutedDimsArray{T,N}} <: AbstractDiskArray{T,N}
13+
struct PermutedDiskArray{T,N,P<:PermutedDimsArray{T,N}} <: AbstractPermutedDiskArray{T,N,P}
714
a::P
815
end
916

1017
# Base methods
11-
12-
Base.size(a::PermutedDiskArray) = size(a.a)
13-
18+
Base.size(a::AbstractPermutedDiskArray) = size(a.a)
19+
Base.parent(a::AbstractPermutedDiskArray) = a.a.parent
1420
# DiskArrays interface
1521

16-
haschunks(a::PermutedDiskArray) = haschunks(a.a.parent)
17-
function eachchunk(a::PermutedDiskArray)
22+
haschunks(a::AbstractPermutedDiskArray) = haschunks(parent(a))
23+
function eachchunk(a::AbstractPermutedDiskArray)
1824
# Get the parent chunks
19-
gridchunks = eachchunk(a.a.parent)
20-
perm = _getperm(a.a)
25+
gridchunks = eachchunk(parent(a))
26+
perm = _getperm(a)
2127
# Return permuted GridChunks
2228
return GridChunks(genperm(gridchunks.chunks, perm)...)
2329
end
24-
function DiskArrays.readblock!(a::PermutedDiskArray, aout, i::OrdinalRange...)
30+
function DiskArrays.readblock!(a::AbstractPermutedDiskArray, aout, i::OrdinalRange...)
2531
iperm = _getiperm(a)
2632
# Permute the indices
2733
inew = genperm(i, iperm)
2834
# Permute the dest block and read from the true parent
29-
DiskArrays.readblock!(a.a.parent, PermutedDimsArray(aout, iperm), inew...)
35+
DiskArrays.readblock!(parent(a), PermutedDimsArray(aout, iperm), inew...)
3036
return nothing
3137
end
32-
function DiskArrays.writeblock!(a::PermutedDiskArray, v, i::OrdinalRange...)
38+
function DiskArrays.writeblock!(a::AbstractPermutedDiskArray, v, i::OrdinalRange...)
3339
iperm = _getiperm(a)
3440
inew = genperm(i, iperm)
3541
# Permute the dest block and write from the true parent
36-
DiskArrays.writeblock!(a.a.parent, PermutedDimsArray(v, iperm), inew...)
42+
DiskArrays.writeblock!(parent(a), PermutedDimsArray(v, iperm), inew...)
3743
return nothing
3844
end
3945

40-
_getperm(a::PermutedDiskArray) = _getperm(a.a)
46+
_getperm(a::AbstractPermutedDiskArray) = _getperm(a.a)
4147
_getperm(::PermutedDimsArray{<:Any,<:Any,perm}) where {perm} = perm
4248

43-
_getiperm(a::PermutedDiskArray) = _getiperm(a.a)
49+
_getiperm(a::AbstractPermutedDiskArray) = _getiperm(a.a)
4450
_getiperm(::PermutedDimsArray{<:Any,<:Any,<:Any,iperm}) where {iperm} = iperm
4551

4652
# Implementaion macros

src/subarray.jl

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,39 @@
1+
"""
2+
SubDiskArray <: AbstractDiskArray
3+
4+
Abstract supertype for a view of an AbstractDiskArray
5+
"""
6+
abstract type AbstractSubDiskArray{T,N,P,I,L} <: AbstractDiskArray{T,N} end
7+
18
"""
29
SubDiskArray <: AbstractDiskArray
310
411
A replacement for `Base.SubArray` for disk arrays, returned by `view`.
512
"""
6-
struct SubDiskArray{T,N,P,I,L} <: AbstractDiskArray{T,N}
13+
struct SubDiskArray{T,N,P,I,L} <: AbstractSubDiskArray{T,N,P,I,L}
714
v::SubArray{T,N,P,I,L}
815
end
916

1017
# Base methods
11-
Base.view(a::SubDiskArray, i...) = SubDiskArray(view(a.v, i...))
12-
Base.view(a::SubDiskArray, i::CartesianIndices) = view(a, i.indices...)
13-
Base.size(a::SubDiskArray) = size(a.v)
14-
Base.parent(a::SubDiskArray) = a.v.parent
18+
Base.view(a::AbstractSubDiskArray, i...) = SubDiskArray(view(a.v, i...))
19+
Base.view(a::AbstractSubDiskArray, i::CartesianIndices) = view(a, i.indices...)
20+
Base.size(a::AbstractSubDiskArray) = size(a.v)
21+
Base.parent(a::AbstractSubDiskArray) = a.v.parent
1522

1623
_replace_colon(s, ::Colon) = Base.OneTo(s)
1724
_replace_colon(s, r) = r
1825

1926
# Diskarrays.jl interface
20-
function readblock!(a::SubDiskArray, aout, i::OrdinalRange...)
27+
function readblock!(a::AbstractSubDiskArray, aout, i::OrdinalRange...)
2128
pinds = parentindices(view(a.v, i...))
2229
getindex_disk!(aout, parent(a.v), pinds...)
2330
end
24-
function writeblock!(a::SubDiskArray, v, i::OrdinalRange...)
31+
function writeblock!(a::AbstractSubDiskArray, v, i::OrdinalRange...)
2532
pinds = parentindices(view(a.v, i...))
2633
setindex_disk!(parent(a.v), v, pinds...)
2734
end
28-
haschunks(a::SubDiskArray) = haschunks(parent(a.v))
29-
eachchunk(a::SubDiskArray) = eachchunk_view(haschunks(a.v.parent), a.v)
35+
haschunks(a::AbstractSubDiskArray) = haschunks(parent(a.v))
36+
eachchunk(a::AbstractSubDiskArray) = eachchunk_view(haschunks(a.v.parent), a.v)
3037

3138
function eachchunk_view(::Chunked, vv)
3239
pinds = parentindices(vv)

0 commit comments

Comments
 (0)