Mercurial > repos > public > sbplib_julia
comparison src/Grids/tensor_grid.jl @ 1386:4d628c83987e refactor/grids/cartesian_indexing
Add method `getindex(::Grid,::CartesianIndex)` with a default implementation
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 26 Jul 2023 21:36:50 +0200 |
parents | 42ecd4b3e215 |
children | 60857d8338cb |
comparison
equal
deleted
inserted
replaced
1384:851d1e4ab3de | 1386:4d628c83987e |
---|---|
15 return new{T,D,typeof(gs)}(gs) | 15 return new{T,D,typeof(gs)}(gs) |
16 end | 16 end |
17 end | 17 end |
18 | 18 |
19 # Indexing interface | 19 # Indexing interface |
20 function Base.getindex(g::TensorGrid, I...) | 20 function Base.getindex(g::TensorGrid, I::Vararg{Int}) |
21 szs = ndims.(g.grids) | 21 szs = ndims.(g.grids) |
22 | 22 |
23 Is = LazyTensors.split_tuple(I, szs) | 23 Is = LazyTensors.split_tuple(I, szs) |
24 ps = map((g,I)->SVector(g[I...]), g.grids, Is) | 24 ps = map((g,I)->SVector(g[I...]), g.grids, Is) |
25 | 25 |
26 return vcat(ps...) | 26 return vcat(ps...) |
27 end | 27 end |
28 | |
29 Base.getindex(g::TensorGrid, I::CartesianIndex) = g[Tuple(I)...] | |
30 | 28 |
31 function Base.eachindex(g::TensorGrid) | 29 function Base.eachindex(g::TensorGrid) |
32 szs = LazyTensors.concatenate_tuples(size.(g.grids)...) | 30 szs = LazyTensors.concatenate_tuples(size.(g.grids)...) |
33 return CartesianIndices(szs) | 31 return CartesianIndices(szs) |
34 end | 32 end |