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