@@ -27,20 +27,47 @@ OffsetArray(A::AbstractArray{T,N}, offsets::NTuple{N,Int}) where {T,N} =
2727OffsetArray (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)
3535OffsetArray (A:: AbstractArray{T,0} ) where {T} = OffsetArray {T,0,typeof(A)} (A, ())
3636
3737# OffsetVector constructors
3838OffsetVector (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.
141168# ## Convenience functions ###
142169
143170Base. 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 ###
0 commit comments