Tatooine
tensor_unpack.h
Go to the documentation of this file.
1#ifndef TATOOINE_TENSOR_UNPACK_H
2#define TATOOINE_TENSOR_UNPACK_H
3//==============================================================================
5#include <tatooine/tensor.h>
6
7#ifdef I
8#define ____I I
9#undef I
10#endif
11//==============================================================================
12namespace tatooine {
13//==============================================================================
14template <typename Tensor, typename Real, size_t N>
15struct unpack<base_tensor<Tensor, Real, N>> {
16 static constexpr size_t n = N;
18 //----------------------------------------------------------------------------
19 explicit constexpr unpack(base_tensor<Tensor, Real, N>& c) : container{c} {}
20 //----------------------------------------------------------------------------
21 template <size_t I>
22 constexpr auto get() -> auto& {
23 return container(I);
24 }
25 //----------------------------------------------------------------------------
26 template <size_t I>
27 constexpr auto get() const -> const auto& {
28 return container(I);
29 }
30};
31//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32template <typename Tensor, typename Real, size_t N>
34
35//==============================================================================
36template <typename Tensor, typename Real, size_t N>
37struct unpack<const base_tensor<Tensor, Real, N>> {
38 static constexpr size_t n = N;
40 //----------------------------------------------------------------------------
41 explicit constexpr unpack(const base_tensor<Tensor, Real, N>& c)
42 : container{c} {}
43 //----------------------------------------------------------------------------
44 template <size_t I>
45 constexpr auto get() const -> const auto& {
46 return container(I);
47 }
48};
49//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50template <typename Tensor, typename Real, size_t N>
53
54//==============================================================================
55template <typename Real, size_t N>
56struct unpack<tensor<Real, N>> {
57 static constexpr size_t n = N;
59
60 //----------------------------------------------------------------------------
61 explicit constexpr unpack(tensor<Real, N>& c) : container{c} {}
62
63 //----------------------------------------------------------------------------
64 template <size_t I>
65 constexpr auto get() -> auto& {
66 return container[I];
67 }
68
69 //----------------------------------------------------------------------------
70 template <size_t I>
71 constexpr auto get() const -> const auto& {
72 return container[I];
73 }
74};
75//==============================================================================
76template <typename Real, size_t N>
78
79//==============================================================================
80template <typename Real, size_t N>
81struct unpack<const tensor<Real, N>> {
82 static constexpr size_t n = N;
84
85 //----------------------------------------------------------------------------
86 explicit constexpr unpack(const tensor<Real, N>& c) : container{c} {}
87
88 //----------------------------------------------------------------------------
89 template <size_t I>
90 constexpr auto get() const -> const auto& {
91 return container[I];
92 }
93};
94//==============================================================================
95template <typename Real, size_t N>
97//==============================================================================
98} // namespace tatooine
99//==============================================================================
100#ifdef ____I
101#define I ____I
102#undef ____I
103#endif
104#endif
Definition: algorithm.h:6
Definition: base_tensor.h:23
base_tensor< Tensor, Real, N > & container
Definition: tensor_unpack.h:17
constexpr auto get() -> auto &
Definition: tensor_unpack.h:22
constexpr auto get() const -> const auto &
Definition: tensor_unpack.h:27
constexpr unpack(base_tensor< Tensor, Real, N > &c)
Definition: tensor_unpack.h:19
const base_tensor< Tensor, Real, N > & container
Definition: tensor_unpack.h:39
constexpr unpack(const base_tensor< Tensor, Real, N > &c)
Definition: tensor_unpack.h:41
constexpr auto get() const -> const auto &
Definition: tensor_unpack.h:45
constexpr unpack(const tensor< Real, N > &c)
Definition: tensor_unpack.h:86
const tensor< Real, N > & container
Definition: tensor_unpack.h:83
constexpr auto get() const -> const auto &
Definition: tensor_unpack.h:90
constexpr unpack(tensor< Real, N > &c)
Definition: tensor_unpack.h:61
tensor< Real, N > & container
Definition: tensor_unpack.h:58
constexpr auto get() const -> const auto &
Definition: tensor_unpack.h:71
constexpr auto get() -> auto &
Definition: tensor_unpack.h:65
Definition: invoke_unpacked.h:11