Skip to content

Commit

Permalink
Merge pull request #2027 from CliMA/ck/julia1p11
Browse files Browse the repository at this point in the history
Only support multi-dimensional DL indexing in Julia 1.11
  • Loading branch information
charleskawczynski authored Oct 3, 2024
2 parents 4a2d03e + 8f8d62a commit 734f8a9
Showing 1 changed file with 35 additions and 33 deletions.
68 changes: 35 additions & 33 deletions src/DataLayouts/DataLayouts.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1181,39 +1181,41 @@ end
)
end

### --------------- Support for multi-dimensional indexing
# TODO: can we remove this? It's not needed for Julia 1.10,
# but seems needed in Julia 1.11.
@inline Base.getindex(
data::Union{IJF, IJFH, IFH, VIJFH, VIFH, VF, IF},
I::Vararg{Int, N},
) where {N} = Base.getindex(data, to_universal_index(data, I))

@inline Base.setindex!(
data::Union{IJF, IJFH, IFH, VIJFH, VIFH, VF, IF},
val,
I::Vararg{Int, N},
) where {N} = Base.setindex!(data, val, to_universal_index(data, I))

@inline to_universal_index(data::AbstractData, I::Tuple) =
CartesianIndex(_to_universal_index(data, I))

# Certain datalayouts support special indexing.
# Like VF datalayouts with `getindex(::VF, v::Integer)`
#! format: off
@inline _to_universal_index(::VF, I::NTuple{1, T}) where {T} = (T(1), T(1), T(1), I[1], T(1))
@inline _to_universal_index(::IF, I::NTuple{1, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{2, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{3, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{4, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{5, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{2, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{3, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{4, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{5, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::AbstractData, I::NTuple{5}) = I
#! format: on
### ---------------
if VERSION v"1.11.0-beta"
### --------------- Support for multi-dimensional indexing
# TODO: can we remove this? It's not needed for Julia 1.10,
# but seems needed in Julia 1.11.
@inline Base.getindex(
data::Union{IJF, IJFH, IFH, VIJFH, VIFH, VF, IF},
I::Vararg{Int, N},
) where {N} = Base.getindex(data, to_universal_index(data, I))

@inline Base.setindex!(
data::Union{IJF, IJFH, IFH, VIJFH, VIFH, VF, IF},
val,
I::Vararg{Int, N},
) where {N} = Base.setindex!(data, val, to_universal_index(data, I))

@inline to_universal_index(data::AbstractData, I::Tuple) =
CartesianIndex(_to_universal_index(data, I))

# Certain datalayouts support special indexing.
# Like VF datalayouts with `getindex(::VF, v::Integer)`
#! format: off
@inline _to_universal_index(::VF, I::NTuple{1, T}) where {T} = (T(1), T(1), T(1), I[1], T(1))
@inline _to_universal_index(::IF, I::NTuple{1, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{2, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{3, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{4, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IF, I::NTuple{5, T}) where {T} = (I[1], T(1), T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{2, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{3, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{4, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::IJF, I::NTuple{5, T}) where {T} = (I[1], I[2], T(1), T(1), T(1))
@inline _to_universal_index(::AbstractData, I::NTuple{5}) = I
#! format: on
### ---------------
end

"""
data2array(::AbstractData)
Expand Down

0 comments on commit 734f8a9

Please sign in to comment.