cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
enumerate.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_TENSOR_TRAIN_TENSOR_VIEWS_ENUMERATE_H
4#define pRC_TENSOR_TRAIN_TENSOR_VIEWS_ENUMERATE_H
5
9
11{
12 template<class T, class N, class Ranks, class F, class... Vs>
13 requires((IsTensorView<Vs> || IsOperatorView<Vs>) && ...)
15 : public Conditional<
16 IsAssignable<decltype(declval<F>().template operator()<0>(
17 declval<Vs>().template core<0>()...))>,
18 Assignable<T, N, Ranks, Enumerate<T, N, Ranks, F, Vs...>>,
19 View<T, N, Ranks, Enumerate<T, N, Ranks, F, Vs...>>>
20 {
21 private:
22 using Base = Conditional<
23 IsAssignable<decltype(declval<F>().template operator()<0>(
24 declval<Vs>().template core<0>()...))>,
26
27 public:
28 template<class... Xs>
29 requires(IsSame<Vs, RemoveReference<Xs>> && ...)
30 Enumerate(F f, Xs &&...args)
31 : mF(forward<F>(f))
32 , mArgs(forward<Xs>(args)...)
33 {
34 }
35
36 using Base::operator=;
37
38 template<Index C>
39 constexpr decltype(auto) core()
40 {
42 [this](auto const... ops) -> decltype(auto)
43 {
44 return mF.template operator()<C>(
45 get<ops>(mArgs).template core<C>()...);
46 });
47 }
48
49 template<Index C>
50 constexpr decltype(auto) core() const
51 {
53 [this](auto const... ops) -> decltype(auto)
54 {
55 return mF.template operator()<C>(
56 get<ops>(mArgs).template core<C>()...);
57 });
58 }
59
60 private:
61 F mF;
62 Tuple<Vs...> mArgs;
63 };
64}
65#endif // pRC_TENSOR_TRAIN_TENSOR_VIEWS_ENUMERATE_H
Definition gtest_unittest.cc:5120
Definition value.hpp:12
Definition assignable.hpp:13
Definition enumerate.hpp:20
constexpr decltype(auto) core()
Definition enumerate.hpp:39
constexpr decltype(auto) core() const
Definition enumerate.hpp:50
Definition declarations.hpp:21
Definition concepts.hpp:40
Definition concepts.hpp:28
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition declarations.hpp:19
static constexpr auto makeSeriesFor()
Definition sequence.hpp:399
std::tuple< Ts... > Tuple
Definition basics.hpp:23
std::conditional_t< B, T, F > Conditional
Definition basics.hpp:56
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383