@@ -9,15 +9,20 @@ import Serialization: serialize, deserialize
9
9
10
10
An `N`-dimensional domain over an array.
11
11
"""
12
- struct ArrayDomain{N}
13
- indexes:: NTuple{N, Any}
12
+ struct ArrayDomain{N,T <: Tuple }
13
+ indexes:: T
14
14
end
15
- include (" ../lib/domain-blocks.jl" )
16
-
17
15
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... ,))
19
22
ArrayDomain (xs:: Array ) = ArrayDomain ((xs... ,))
20
23
24
+ include (" ../lib/domain-blocks.jl" )
25
+
21
26
indexes (a:: ArrayDomain ) = a. indexes
22
27
chunks (a:: ArrayDomain{N} ) where {N} = DomainBlocks (
23
28
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.
117
122
"""
118
123
Blocks (xs:: Int... ) = Blocks (xs)
119
124
125
+ const DArrayDomain{N} = ArrayDomain{N, NTuple{N, UnitRange{Int}}}
120
126
121
127
"""
122
128
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
133
139
and concatenates them along dimension `d`. `cat` is used by default.
134
140
"""
135
141
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}
138
144
chunks:: AbstractArray{Any, N}
139
145
partitioning:: B
140
146
concat:: F
@@ -154,16 +160,16 @@ DVector{T} = DArray{T,1}
154
160
DArray {T, N} (domain, subdomains, chunks, partitioning, concat= cat) where {T,N} =
155
161
DArray (T, domain, subdomains, chunks, partitioning, concat)
156
162
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} ,
159
165
chunks:: AbstractArray{<:Any, N} , partitioning:: B , concat= cat) where {N,B<: AbstractMultiBlocks{N} }
160
166
DArray {T,N,B,typeof(concat)} (domain, subdomains, chunks, partitioning, concat)
161
167
end
162
168
163
- function DArray (T, domain:: ArrayDomain {N} ,
164
- subdomains:: ArrayDomain {N} ,
169
+ function DArray (T, domain:: DArrayDomain {N} ,
170
+ subdomains:: DArrayDomain {N} ,
165
171
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)... )
167
173
_subdomains[1 ] = subdomains
168
174
_chunks = Array {Any, N} (undef, ntuple (i-> 1 , N)... )
169
175
_chunks[1 ] = chunks
0 commit comments