cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
from_diagonal.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_OPERATOR_VIEWS_FROM_DIAGONAL_H
4#define pRC_CORE_TENSOR_OPERATOR_VIEWS_FROM_DIAGONAL_H
5
8
9namespace pRC::TensorViews
10{
11 template<class T, class N, class V>
12 requires IsTensorView<V>
13 class FromDiagonal : public View<T, N, FromDiagonal<T, N, V>>
14 {
15 private:
17
18 public:
19 template<class X>
22 : mA(forward<X>(a))
23 {
24 }
25
26 template<IsConvertible<Index>... Is>
27 requires(sizeof...(Is) == Base::Dimension)
28 constexpr decltype(auto) operator()(Is const... indices)
29 {
30 return this->call(indices...);
31 }
32
33 template<IsConvertible<Index>... Is>
34 requires(sizeof...(Is) == Base::Dimension)
35 constexpr decltype(auto) operator()(Is const... indices) const
36 {
37 return this->call(indices...);
38 }
39
40 constexpr decltype(auto) operator()(
41 typename Base::Subscripts const &subscripts)
42 {
44 [this, &subscripts](auto const... seq) -> T
45 {
46 if(((subscripts[seq] ==
47 subscripts[Base::Dimension / 2 + seq]) &&
48 ...))
49 {
50 return mA(subscripts[seq]...);
51 }
52
53 return zero();
54 });
55 }
56
57 constexpr decltype(auto) operator()(
58 typename Base::Subscripts const &subscripts) const
59 {
61 [this, &subscripts](auto const... seq) -> T
62 {
63 if(((subscripts[seq] ==
64 subscripts[Base::Dimension / 2 + seq]) &&
65 ...))
66 {
67 return mA(subscripts[seq]...);
68 }
69
70 return zero();
71 });
72 }
73
74 constexpr decltype(auto) operator[](Index const index) = delete;
75 constexpr decltype(auto) operator[](Index const index) const = delete;
76
77 private:
78 V mA;
79 };
80}
81#endif // pRC_CORE_TENSOR_OPERATOR_VIEWS_FROM_DIAGONAL_H
Definition value.hpp:12
Definition from_diagonal.hpp:14
FromDiagonal(X &&a)
Definition from_diagonal.hpp:21
Definition declarations.hpp:20
Definition concepts.hpp:28
Definition declarations.hpp:18
Size Index
Definition basics.hpp:32
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383
static constexpr auto zero()
Definition zero.hpp:12