@@ -4,7 +4,7 @@ module OffsetArrays
4
4
5
5
Base. @deprecate_binding (.. ) Colon ()
6
6
7
- using Base: Indices, LinearSlow, LinearFast, tail
7
+ using Base: Indices, tail
8
8
using Compat
9
9
10
10
export OffsetArray, @unsafe
39
39
OffsetArray {T,N} (A:: AbstractArray{T,N} , inds:: Vararg{AbstractUnitRange,N} ) =
40
40
OffsetArray (A, inds)
41
41
42
- Base . linearindexing {T <:OffsetArray} (:: Type{T } ) = Base . linearindexing (parenttype (T ))
42
+ @compat Compat . IndexStyle {OA <:OffsetArray} (:: Type{OA } ) = IndexStyle (parenttype (OA ))
43
43
parenttype {T,N,AA} (:: Type{OffsetArray{T,N,AA}} ) = AA
44
44
parenttype (A:: OffsetArray ) = parenttype (typeof (A))
45
45
@@ -48,8 +48,8 @@ Base.parent(A::OffsetArray) = A.parent
48
48
errmsg (A) = error (" size not supported for arrays with indices $(indices (A)) ; see http://docs.julialang.org/en/latest/devdocs/offset-arrays/" )
49
49
Base. size (A:: OffsetArray ) = errmsg (A)
50
50
Base. size (A:: OffsetArray , d) = errmsg (A)
51
- Base. eachindex (:: LinearSlow , A:: OffsetArray ) = CartesianRange (indices (A))
52
- Base. eachindex (:: LinearFast , A:: OffsetVector ) = indices (A, 1 )
51
+ Base. eachindex (:: IndexCartesian , A:: OffsetArray ) = CartesianRange (indices (A))
52
+ Base. eachindex (:: IndexLinear , A:: OffsetVector ) = indices (A, 1 )
53
53
54
54
# Implementations of indices and indices1. Since bounds-checking is
55
55
# performance-critical and relies on indices, these are usually worth
168
168
@inline unsafe_setindex! (a:: AbstractArray , val, I... ) = (@inbounds a[I... ] = val; val)
169
169
170
170
# Linear indexing
171
- @inline unsafe_getindex (a:: OffsetArray , i:: Int ) = _unsafe_getindex (Base . linearindexing (a), a, i)
172
- @inline unsafe_setindex! (a:: OffsetArray , val, i:: Int ) = _unsafe_setindex! (Base . linearindexing (a), a, val, i)
173
- for T in (LinearFast, LinearSlow ) # ambiguity-resolution requires specificity for both
171
+ @inline unsafe_getindex (a:: OffsetArray , i:: Int ) = _unsafe_getindex (IndexStyle (a), a, i)
172
+ @inline unsafe_setindex! (a:: OffsetArray , val, i:: Int ) = _unsafe_setindex! (IndexStyle (a), a, val, i)
173
+ for T in (IndexLinear, IndexCartesian ) # ambiguity-resolution requires specificity for both
174
174
@eval begin
175
175
@inline function _unsafe_getindex (:: $T , a:: OffsetVector , i:: Int )
176
176
@inbounds ret = parent (a)[offset (a. offsets, (i,))[1 ]]
@@ -182,17 +182,17 @@ for T in (LinearFast, LinearSlow) # ambiguity-resolution requires specificity f
182
182
end
183
183
end
184
184
end
185
- @inline function _unsafe_getindex (:: LinearFast , a:: OffsetArray , i:: Int )
185
+ @inline function _unsafe_getindex (:: IndexLinear , a:: OffsetArray , i:: Int )
186
186
@inbounds ret = parent (a)[i]
187
187
ret
188
188
end
189
- @inline _unsafe_getindex (:: LinearSlow , a:: OffsetArray , i:: Int ) =
189
+ @inline _unsafe_getindex (:: IndexCartesian , a:: OffsetArray , i:: Int ) =
190
190
unsafe_getindex (a, ind2sub (indices (a), i)... )
191
- @inline function _unsafe_setindex! (:: LinearFast , a:: OffsetArray , val, i:: Int )
191
+ @inline function _unsafe_setindex! (:: IndexLinear , a:: OffsetArray , val, i:: Int )
192
192
@inbounds parent (a)[i] = val
193
193
val
194
194
end
195
- @inline _unsafe_setindex! (:: LinearSlow , a:: OffsetArray , val, i:: Int ) =
195
+ @inline _unsafe_setindex! (:: IndexCartesian , a:: OffsetArray , val, i:: Int ) =
196
196
unsafe_setindex! (a, val, ind2sub (indices (a), i)... )
197
197
198
198
@inline unsafe_getindex (a:: OffsetArray , I:: Int... ) = unsafe_getindex (parent (a), offset (a. offsets, I)... )
0 commit comments