cMHN 1.1
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
extract_diagonal.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_OPERATOR_VIEWS_EXTRACT_DIAGONAL_H
4#define pRC_CORE_TENSOR_OPERATOR_VIEWS_EXTRACT_DIAGONAL_H
5
8
9namespace pRC::TensorViews
10{
11 template<class T, class N, class V>
13 : public Conditional<IsAssignable<V>,
14 Assignable<T, N, ExtractDiagonal<T, N, V>>,
15 View<T, N, ExtractDiagonal<T, N, V>>>
16 {
17 static_assert(IsTensorView<V>());
18
19 private:
20 using Base = Conditional<IsAssignable<V>,
23
24 public:
25 template<class X, If<IsConstructible<V, X>> = 0>
27 : mA(forward<X>(a))
28 {
29 }
30
31 using Base::operator=;
32
33 template<class... Is, If<All<IsConvertible<Is, Index>...>> = 0,
34 If<IsSatisfied<(sizeof...(Is) == typename Base::Dimension())>> = 0>
35 constexpr decltype(auto) operator()(Is const... indices)
36 {
37 return mA(indices..., indices...);
38 }
39
40 template<class... Is, If<All<IsConvertible<Is, Index>...>> = 0,
41 If<IsSatisfied<(sizeof...(Is) == typename Base::Dimension())>> = 0>
42 constexpr decltype(auto) operator()(Is const... indices) const
43 {
44 return mA(indices..., indices...);
45 }
46
47 constexpr decltype(auto) operator()(
48 typename Base::Subscripts const &subscripts)
49 {
50 return this->call(subscripts);
51 }
52
53 constexpr decltype(auto) operator()(
54 typename Base::Subscripts const &subscripts) const
55 {
56 return this->call(subscripts);
57 }
58
59 private:
60 V mA;
61 };
62}
63#endif // pRC_CORE_TENSOR_OPERATOR_VIEWS_EXTRACT_DIAGONAL_H
Definition assignable.hpp:22
Definition extract_diagonal.hpp:16
constexpr decltype(auto) operator()(Is const ... indices) const
Definition extract_diagonal.hpp:42
ExtractDiagonal(X &&a)
Definition extract_diagonal.hpp:26
constexpr decltype(auto) operator()(Is const ... indices)
Definition extract_diagonal.hpp:35
Definition type_traits.hpp:32
Definition diagonal.hpp:11
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
std::conditional_t< B{}, T, F > Conditional
Definition type_traits.hpp:131