Skip to content

Commit e5c2a17

Browse files
committed
DArray: Make ArrayDomain and DomainBlocks more concrete
1 parent d997f92 commit e5c2a17

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

src/array/darray.jl

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@ import Serialization: serialize, deserialize
99
1010
An `N`-dimensional domain over an array.
1111
"""
12-
struct ArrayDomain{N}
13-
indexes::NTuple{N, Any}
12+
struct ArrayDomain{N,T<:Tuple}
13+
indexes::T
1414
end
15-
include("../lib/domain-blocks.jl")
16-
1715

18-
ArrayDomain(xs...) = ArrayDomain(xs)
16+
ArrayDomain(xs::T) where T<:Tuple = ArrayDomain{length(xs),T}(xs)
17+
ArrayDomain(xs::NTuple{N,Base.OneTo}) where N =
18+
ArrayDomain{N,NTuple{N,UnitRange{Int}}}(ntuple(i->UnitRange(xs[i]), N))
19+
ArrayDomain(xs::NTuple{N,Int}) where N =
20+
ArrayDomain{N,NTuple{N,UnitRange{Int}}}(ntuple(i->xs[i]:xs[i], N))
21+
ArrayDomain(xs...) = ArrayDomain((xs...,))
1922
ArrayDomain(xs::Array) = ArrayDomain((xs...,))
2023

24+
include("../lib/domain-blocks.jl")
25+
2126
indexes(a::ArrayDomain) = a.indexes
2227
chunks(a::ArrayDomain{N}) where {N} = DomainBlocks(
2328
ntuple(i->first(indexes(a)[i]), Val(N)), map(x->[length(x)], indexes(a)))
@@ -117,6 +122,7 @@ indicates the number of dimensions in the resulting array.
117122
"""
118123
Blocks(xs::Int...) = Blocks(xs)
119124

125+
const DArrayDomain{N} = ArrayDomain{N, NTuple{N, UnitRange{Int}}}
120126

121127
"""
122128
DArray{T,N,F}(domain, subdomains, chunks, concat)
@@ -133,8 +139,8 @@ An N-dimensional distributed array of element type T, with a concatenation funct
133139
and concatenates them along dimension `d`. `cat` is used by default.
134140
"""
135141
mutable struct DArray{T,N,B<:AbstractBlocks{N},F} <: ArrayOp{T, N}
136-
domain::ArrayDomain{N}
137-
subdomains::AbstractArray{ArrayDomain{N}, N}
142+
domain::DArrayDomain{N}
143+
subdomains::AbstractArray{DArrayDomain{N}, N}
138144
chunks::AbstractArray{Any, N}
139145
partitioning::B
140146
concat::F
@@ -154,16 +160,16 @@ DVector{T} = DArray{T,1}
154160
DArray{T, N}(domain, subdomains, chunks, partitioning, concat=cat) where {T,N} =
155161
DArray(T, domain, subdomains, chunks, partitioning, concat)
156162

157-
function DArray(T, domain::ArrayDomain{N},
158-
subdomains::AbstractArray{ArrayDomain{N}, N},
163+
function DArray(T, domain::DArrayDomain{N},
164+
subdomains::AbstractArray{DArrayDomain{N}, N},
159165
chunks::AbstractArray{<:Any, N}, partitioning::B, concat=cat) where {N,B<:AbstractMultiBlocks{N}}
160166
DArray{T,N,B,typeof(concat)}(domain, subdomains, chunks, partitioning, concat)
161167
end
162168

163-
function DArray(T, domain::ArrayDomain{N},
164-
subdomains::ArrayDomain{N},
169+
function DArray(T, domain::DArrayDomain{N},
170+
subdomains::DArrayDomain{N},
165171
chunks::Any, partitioning::B, concat=cat) where {N,B<:AbstractSingleBlocks{N}}
166-
_subdomains = Array{ArrayDomain{N}, N}(undef, ntuple(i->1, N)...)
172+
_subdomains = Array{DArrayDomain{N}, N}(undef, ntuple(i->1, N)...)
167173
_subdomains[1] = subdomains
168174
_chunks = Array{Any, N}(undef, ntuple(i->1, N)...)
169175
_chunks[1] = chunks

src/lib/domain-blocks.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Base: size, getindex
22

3-
struct DomainBlocks{N} <: AbstractArray{ArrayDomain{N}, N}
3+
struct DomainBlocks{N} <: AbstractArray{ArrayDomain{N, NTuple{N, UnitRange{Int}}}, N}
44
start::NTuple{N, Int}
5-
cumlength::Tuple
5+
cumlength::NTuple{N, Vector{Int}}
66
end
77
Base.@deprecate_binding BlockedDomains DomainBlocks
88

0 commit comments

Comments
 (0)