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 |
