Skip to content

Commit b3cbcc2

Browse files
authored
Merge pull request #20169 from JuliaLang/teh/convert_cr
Convert CartesianRange back to Tuple{UnitRange...}
2 parents 947347f + e2b6a36 commit b3cbcc2

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

base/multidimensional.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
module IteratorsMD
55
import Base: eltype, length, size, start, done, next, last, in, getindex,
66
setindex!, linearindexing, min, max, zero, one, isless, eachindex,
7-
ndims, iteratorsize
7+
ndims, iteratorsize, convert
88

99
importall ..Base.Operators
1010
import Base: simd_outer_range, simd_inner_length, simd_index
@@ -88,6 +88,15 @@ module IteratorsMD
8888
CartesianRange{N}(rngs::NTuple{N,Union{Integer,AbstractUnitRange}}) =
8989
CartesianRange(CartesianIndex(map(first, rngs)), CartesianIndex(map(last, rngs)))
9090

91+
convert{N}(::Type{NTuple{N,UnitRange{Int}}}, R::CartesianRange{CartesianIndex{N}}) =
92+
map((f,l)->f:l, first(R).I, last(R).I)
93+
convert{N}(::Type{NTuple{N,UnitRange}}, R::CartesianRange) =
94+
convert(NTuple{N,UnitRange{Int}}, R)
95+
convert{N}(::Type{Tuple{Vararg{UnitRange{Int}}}}, R::CartesianRange{CartesianIndex{N}}) =
96+
convert(NTuple{N,UnitRange{Int}}, R)
97+
convert(::Type{Tuple{Vararg{UnitRange}}}, R::CartesianRange) =
98+
convert(Tuple{Vararg{UnitRange{Int}}}, R)
99+
91100
ndims(R::CartesianRange) = length(R.start)
92101
ndims{I<:CartesianIndex}(::Type{CartesianRange{I}}) = length(I)
93102

test/arrayops.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1449,6 +1449,9 @@ end
14491449
@test !in(CartesianIndex((3,6)), R)
14501450
@test !in(CartesianIndex((6,5)), R)
14511451

1452+
@test @inferred(convert(NTuple{2,UnitRange}, R)) === (2:5, 3:5)
1453+
@test @inferred(convert(Tuple{Vararg{UnitRange}}, R)) === (2:5, 3:5)
1454+
14521455
@test CartesianRange((3:5,-7:7)) == CartesianRange(CartesianIndex{2}(3,-7),CartesianIndex{2}(5,7))
14531456
@test CartesianRange((3,-7:7)) == CartesianRange(CartesianIndex{2}(3,-7),CartesianIndex{2}(3,7))
14541457
end

0 commit comments

Comments
 (0)