1#ifndef TATOOINE_TENSOR_SLICE_H
2#define TATOOINE_TENSOR_SLICE_H
9template <
typename Tensor, arithmetic_or_complex ValueType, std::size_t FixedDim,
12 :
base_tensor<tensor_slice<Tensor, ValueType, FixedDim, Dims...>, ValueType,
19 using parent_type::operator=;
42 constexpr auto at(
integral auto const... is)
const ->
decltype(
auto) {
43 if constexpr (FixedDim == 0) {
46 }
else if constexpr (FixedDim ==
rank()) {
50 auto at_ = [
this](
const auto... is) ->
decltype(
auto) {
54 unpack(variadic::extract<0, FixedDim>(
55 static_cast<std::size_t
>(is)...)),
58 static_cast<std::size_t
>(is)...)));
64 requires is_non_const<Tensor> {
65 if constexpr (FixedDim == 0) {
68 }
else if constexpr (FixedDim ==
rank()) {
72 auto at_ = [
this](
const auto... is) ->
decltype(
auto) {
76 unpack(variadic::extract<0, FixedDim>(
77 static_cast<std::size_t
>(is)...)),
80 static_cast<std::size_t
>(is)...)));
Definition: concepts.h:21
constexpr auto extract(T &&t, Ts &&... ts)
Extracts variadic data into an array in the Range of Begin and End.
Definition: variadic_helpers.h:172
Definition: algorithm.h:6
tensor< real_number, Dimensions... > Tensor
Definition: tensor.h:184
constexpr decltype(auto) invoke_unpacked(F &&f)
All arguments are bound -> just call f.
Definition: invoke_unpacked.h:15
Definition: base_tensor.h:23
static auto constexpr rank()
Definition: base_tensor.h:41
ValueType value_type
Definition: base_tensor.h:24
static auto constexpr num_components()
Definition: base_tensor.h:43
Definition: tensor_slice.h:13
static auto constexpr rank()
Definition: base_tensor.h:41
constexpr auto at(integral auto const ... is) const -> decltype(auto)
Definition: tensor_slice.h:42
Tensor * m_tensor
Definition: tensor_slice.h:33
std::size_t m_fixed_index
Definition: tensor_slice.h:34
constexpr auto at(integral auto const ... is) -> decltype(auto)
Definition: tensor_slice.h:62
constexpr tensor_slice(Tensor *tensor, std::size_t fixed_index)
Definition: tensor_slice.h:38
tensor_slice< Tensor, ValueType, FixedDim, Dims... > this_type
Definition: tensor_slice.h:15
auto constexpr at(integral auto const ... is) -> decltype(auto)
Definition: tensor.h:38
Definition: invoke_unpacked.h:11