cMHN 1.1
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
slice.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
4#define pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
5
8
9namespace pRC
10{
11 template<Size... Es>
12 struct Slice;
13
14 template<Size... Es, class X, class... Os, class R = RemoveReference<X>,
17 If<IsSatisfied<(sizeof...(Es) == typename R::Dimension())>> = 0,
18 If<IsSatisfied<(sizeof...(Os) == typename R::Dimension())>> = 0,
19 If<IsSatisfied<(Sizes<Es...>() <= typename R::Sizes())>> = 0>
20 static inline constexpr auto slice(X &&a, Os const... offsets)
21 {
23 return expand(makeSeries<Index, typename R::Dimension{}>(),
24 [&a, &offsets...](auto const... seq)
25 {
26 return TensorViews::Slice<typename R::Type, Sizes<Es...>,
27 Sizes<(R::size(seq) - Es + 1)...>, V>(view(forward<X>(a)),
28 Subscripts<(R::size(seq) - Es + 1)...>(offsets...));
29 });
30 }
31
32 template<Size... Es, class X, class... Os, class R = RemoveReference<X>,
34 If<IsInvocable<Slice<Es...>, X &, Os...>> = 0>
35 static inline constexpr auto slice(X &&a, Os const... offsets)
36 {
37 return eval(slice<Es...>(a, offsets...));
38 }
39}
40#endif // pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
Definition sequence.hpp:56
Definition subscripts.hpp:20
Definition slice.hpp:13
Definition cholesky.hpp:18
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
std::size_t Size
Definition type_traits.hpp:20
static constexpr X view(X &&a)
Definition view.hpp:12
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto slice(X &&a, Os const ... offsets)
Definition slice.hpp:20
static constexpr auto makeSeries()
Definition sequence.hpp:351
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:344
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134