cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
permute.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_VIEWS_PERMUTE_H
4#define pRC_CORE_TENSOR_VIEWS_PERMUTE_H
5
9
10namespace pRC::TensorViews
11{
12 template<class T, class N, class P, class V>
13 class Permute;
14
15 template<class T, class N, Index... Ps, class V>
16 requires IsTensorView<V>
17 class Permute<T, N, Sequence<Index, Ps...>, V>
18 : public Conditional<IsAssignable<V>,
19 Assignable<T, N, Permute<T, N, Sequence<Index, Ps...>, V>>,
20 View<T, N, Permute<T, N, Sequence<Index, Ps...>, V>>>
21 {
22 private:
25
26 public:
27 template<class X>
29 Permute(X &&a)
30 : mA(forward<X>(a))
31 {
32 }
33
34 using Base::operator=;
35
36 template<IsConvertible<Index>... Is>
37 requires(sizeof...(Is) == Base::Dimension)
38 constexpr decltype(auto) operator()(Is const... indices)
39 {
40 return this->call(indices...);
41 }
42
43 template<IsConvertible<Index>... Is>
44 requires(sizeof...(Is) == Base::Dimension)
45 constexpr decltype(auto) operator()(Is const... indices) const
46 {
47 return this->call(indices...);
48 }
49
50 constexpr decltype(auto) operator()(
51 typename Base::Subscripts const &subscripts)
52 {
54 [this, &subscripts](auto const... seq) -> decltype(auto)
55 {
56 return mA(subscripts[seq]...);
57 });
58 }
59
60 constexpr decltype(auto) operator()(
61 typename Base::Subscripts const &subscripts) const
62 {
64 [this, &subscripts](auto const... seq) -> decltype(auto)
65 {
66 return mA(subscripts[seq]...);
67 });
68 }
69
70 constexpr decltype(auto) operator[](Index const index)
71 requires IsSubscriptable<V> &&
73 {
74 return mA[index];
75 }
76
77 constexpr decltype(auto) operator[](Index const index) const
78 requires IsSubscriptable<V> &&
80 {
81 return mA[index];
82 }
83
84 private:
85 V mA;
86 };
87}
88#endif // pRC_CORE_TENSOR_VIEWS_PERMUTE_H
Definition gtest_unittest.cc:5120
Definition value.hpp:12
Definition sequence.hpp:29
Definition assignable.hpp:21
Definition permute.hpp:13
Definition declarations.hpp:20
Definition concepts.hpp:28
Definition subscript.hpp:21
Definition declarations.hpp:36
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition declarations.hpp:18
Size Index
Definition basics.hpp:32
static constexpr auto makeSeriesFor()
Definition sequence.hpp:399
std::conditional_t< B, T, F > Conditional
Definition basics.hpp:56
static constexpr auto getPermutation(Sequence< T, From, Froms... > const, Sequence< T, To, Tos... > const, Sequence< T, P, Ps... > const)
Definition sequence.hpp:673
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383