-
Notifications
You must be signed in to change notification settings - Fork 8
/
views.jl
35 lines (31 loc) · 1.06 KB
/
views.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@inline function Base.view(
A::AbstractPtrArray{T,N,R,S,X,O,P},
i::Vararg{Union{Integer,AbstractRange,Colon},N},
) where {T,N,R,S,X,O,P}
PtrArray(SubArray(A, Base.to_indices(A, i)))
end
@inline function zview(
A::AbstractPtrArray{T,N,R,S,X,O,P},
i::Vararg{Union{Integer,AbstractRange,Colon},N},
) where {T,N,R,S,X,O,P}
zero_offsets(view(A, i...))
end
@inline Base.view(A::AbstractPtrArray, ::Colon) = vec(A)
@inline zview(A::AbstractPtrArray, ::Colon) = vec(A)
@inline Base.view(A::AbstractPtrArray{<:Any,N}, ::Vararg{Colon,N}) where {N} = A
@inline zview(A::AbstractPtrArray{<:Any,N}, ::Vararg{Colon,N}) where {N} = A
@inline Base.view(A::AbstractPtrVector, ::Colon) = A
@inline zview(A::AbstractPtrVector, ::Colon) = A
"""
rank_to_sortperm(::NTuple{N,Int}) -> NTuple{N,Int}
Returns the `sortperm` of the stride ranks.
"""
function rank_to_sortperm(R::NTuple{N,Int}) where {N}
sp = ntuple(zero, Val{N}())
r = ntuple(n -> sum(R[n] .≥ R), Val{N}())
@inbounds for n = 1:N
sp = Base.setindex(sp, n, r[n])
end
sp
end
rank_to_sortperm(R) = sortperm(R)