Skip to content

Commit dc47fb8

Browse files
committed
use unitialized in OffsetArray constructors
1 parent ce24a51 commit dc47fb8

File tree

3 files changed

+45
-17
lines changed

3 files changed

+45
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ like Fortran.
88
```julia
99
julia> using OffsetArrays
1010

11-
julia> y = OffsetArray{Float64}(-1:1, -7:7, -128:512, -5:5, -1:1, -3:3, -2:2, -1:1);
11+
julia> y = OffsetArray{Float64}(uninitialized, -1:1, -7:7, -128:512, -5:5, -1:1, -3:3, -2:2, -1:1);
1212

1313
julia> summary(y)
1414
"OffsetArrays.OffsetArray{Float64,8,Array{Float64,8}} with indices -1:1×-7:7×-128:512×-5:5×-1:1×-3:3×-2:2×-1:1"

src/OffsetArrays.jl

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,47 @@ OffsetArray(A::AbstractArray{T,N}, offsets::NTuple{N,Int}) where {T,N} =
2727
OffsetArray(A::AbstractArray{T,N}, offsets::Vararg{Int,N}) where {T,N} =
2828
OffsetArray(A, offsets)
2929

30-
OffsetArray{T,N}(inds::Indices{N}) where {T,N} =
30+
OffsetArray{T,N}(::Uninitialized, inds::Indices{N}) where {T,N} =
3131
OffsetArray{T,N,Array{T,N}}(Array{T,N}(uninitialized, map(length, inds)), map(indexoffset, inds))
32-
OffsetArray{T}(inds::Indices{N}) where {T,N} = OffsetArray{T,N}(inds)
33-
OffsetArray{T,N}(inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T,N}(inds)
34-
OffsetArray{T}(inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T,N}(inds)
32+
OffsetArray{T}(::Uninitialized, inds::Indices{N}) where {T,N} = OffsetArray{T,N}(uninitialized, inds)
33+
OffsetArray{T,N}(::Uninitialized, inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T,N}(uninitialized, inds)
34+
OffsetArray{T}(::Uninitialized, inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T,N}(uninitialized, inds)
3535
OffsetArray(A::AbstractArray{T,0}) where {T} = OffsetArray{T,0,typeof(A)}(A, ())
3636

3737
# OffsetVector constructors
3838
OffsetVector(A::AbstractVector, offset) = OffsetArray(A, offset)
39-
OffsetVector{T}(inds::AbstractUnitRange) where {T} = OffsetArray{T}(inds)
39+
OffsetVector{T}(::Uninitialized, inds::AbstractUnitRange) where {T} = OffsetArray{T}(uninitialized, inds)
40+
41+
# deprecated constructors
42+
using Base: @deprecate
4043

4144
# https://github.com/JuliaLang/julia/pull/19989
42-
Base.@deprecate OffsetArray(::Type{T}, inds::Vararg{UnitRange{Int},N}) where {T,N} OffsetArray{T}(inds)
43-
Base.@deprecate OffsetVector(::Type{T}, inds::AbstractUnitRange) where {T} OffsetVector{T}(inds)
45+
@static if isdefined(Base, :Uninitialized)
46+
@deprecate OffsetArray(::Type{T}, inds::Vararg{UnitRange{Int},N}) where {T,N} OffsetArray{T}(uninitialized, inds)
47+
@deprecate OffsetVector(::Type{T}, inds::AbstractUnitRange) where {T} OffsetVector{T}(uninitialized, inds)
48+
else
49+
OffsetArray(::Type{T}, inds::Vararg{UnitRange{Int},N}) where {T,N} = OffsetArray{T}(inds)
50+
OffsetVector(::Type{T}, inds::AbstractUnitRange) where {T} = OffsetVector{T}(inds)
51+
end
52+
53+
# https://github.com/JuliaLang/julia/pull/24652
54+
# Only activate deprecation if `uninitialized` is available from Base;
55+
# should not rely on the user having `uninitialized` available from Compat
56+
# and OffsetArrays.jl should probably not re-export Compat.uninitialized
57+
@static if isdefined(Base, :Uninitialized)
58+
@deprecate OffsetArray{T,N}(inds::Indices{N}) where {T,N} OffsetArray{T,N}(uninitialized, inds)
59+
@deprecate OffsetArray{T}(inds::Indices{N}) where {T,N} OffsetArray{T}(uninitialized, inds)
60+
@deprecate OffsetArray{T,N}(inds::Vararg{AbstractUnitRange,N}) where {T,N} OffsetArray{T,N}(uninitialized, inds)
61+
@deprecate OffsetArray{T}(inds::Vararg{AbstractUnitRange,N}) where {T,N} OffsetArray{T}(uninitialized, inds)
62+
@deprecate OffsetVector{T}(inds::AbstractUnitRange) where {T} OffsetVector{T}(uninitialized, inds)
63+
else
64+
OffsetArray{T,N}(inds::Indices{N}) where {T,N} = OffsetArray{T,N}(uninitialized, inds)
65+
OffsetArray{T}(inds::Indices{N}) where {T,N} = OffsetArray{T}(uninitialized, inds)
66+
OffsetArray{T,N}(inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T,N}(uninitialized, inds)
67+
OffsetArray{T}(inds::Vararg{AbstractUnitRange,N}) where {T,N} = OffsetArray{T}(uninitialized, inds)
68+
OffsetVector{T}(inds::AbstractUnitRange) where {T} = OffsetVector{T}(uninitialized, inds)
69+
end
70+
4471

4572
# The next two are necessary for ambiguity resolution. Really, the
4673
# second method should not be necessary.
@@ -141,7 +168,7 @@ end
141168
### Convenience functions ###
142169

143170
Base.fill(x, inds::Tuple{UnitRange,Vararg{UnitRange}}) =
144-
fill!(OffsetArray{typeof(x)}(inds), x)
171+
fill!(OffsetArray{typeof(x)}(uninitialized, inds), x)
145172
@inline Base.fill(x, ind1::UnitRange, inds::UnitRange...) = fill(x, (ind1, inds...))
146173

147174
### Low-level utilities ###

test/runtests.jl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Compat.Test
22
using OffsetArrays
3+
using Compat
34
using Compat: axes, CartesianIndices, copyto!
45
using Compat.DelimitedFiles
56

@@ -8,10 +9,10 @@ using Compat.DelimitedFiles
89
# Basics
910
for n = 0:5
1011
for a in (OffsetArray(ones(Int,ntuple(d->1,n)), ntuple(x->x-1,n)),
11-
fill!(OffsetArray{Float64}(ntuple(x->x:x, n)), 1),
12-
fill!(OffsetArray{Float64}(ntuple(x->x:x, n)...), 1),
13-
fill!(OffsetArray{Float64,n}(ntuple(x->x:x, n)), 1),
14-
fill!(OffsetArray{Float64,n}(ntuple(x->x:x, n)...), 1))
12+
fill!(OffsetArray{Float64}(uninitialized, ntuple(x->x:x, n)), 1),
13+
fill!(OffsetArray{Float64}(uninitialized, ntuple(x->x:x, n)...), 1),
14+
fill!(OffsetArray{Float64,n}(uninitialized, ntuple(x->x:x, n)), 1),
15+
fill!(OffsetArray{Float64,n}(uninitialized, ntuple(x->x:x, n)...), 1))
1516
@test length(linearindices(a)) == 1
1617
@test axes(a) == ntuple(x->x:x, n)
1718
@test a[1] == 1
@@ -23,7 +24,7 @@ a = OffsetArray(a0)
2324
@test ndims(a) == 0
2425
@test a[] == 3
2526

26-
y = OffsetArray{Float64}(-1:1, -7:7, -128:512, -5:5, -1:1, -3:3, -2:2, -1:1)
27+
y = OffsetArray{Float64}(uninitialized, -1:1, -7:7, -128:512, -5:5, -1:1, -3:3, -2:2, -1:1)
2728
@test axes(y) == (-1:1, -7:7, -128:512, -5:5, -1:1, -3:3, -2:2, -1:1)
2829
y[-1,-7,-128,-5,-1,-3,-2,-1] = 14
2930
y[-1,-7,-128,-5,-1,-3,-2,-1] += 5
@@ -209,7 +210,7 @@ v = view(A0, 1:1, i1)
209210
@test A[A .> 2] == [3,4]
210211

211212
# copyto!
212-
a = OffsetArray{Int}((-3:-1,))
213+
a = OffsetArray{Int}(uninitialized, (-3:-1,))
213214
fill!(a, -1)
214215
copyto!(a, (1,2)) # non-array iterables
215216
@test a[-3] == 1
@@ -253,7 +254,7 @@ copyto!(a, -3, b, 2)
253254
@test a[-3] == 2
254255
@test a[-2] == a[-1] == -1
255256
@test_throws BoundsError copyto!(a, -3, b, 1, 4)
256-
am = OffsetArray{Int}((1:1, 7:9)) # for testing linear indexing
257+
am = OffsetArray{Int}(uninitialized, (1:1, 7:9)) # for testing linear indexing
257258
fill!(am, -1)
258259
copyto!(am, b)
259260
@test am[1] == 1
@@ -367,5 +368,5 @@ end
367368
local v = rand(5)
368369
@test OffsetVector(v, -2) == OffsetArray(v, -2)
369370
@test OffsetVector(v, -2:2) == OffsetArray(v, -2:2)
370-
@test typeof(OffsetVector{Float64}(-2:2)) == typeof(OffsetArray{Float64}(-2:2))
371+
@test typeof(OffsetVector{Float64}(uninitialized, -2:2)) == typeof(OffsetArray{Float64}(uninitialized, -2:2))
371372
end

0 commit comments

Comments
 (0)