3#ifndef pRC_CORE_BASIC_RANGE_H
4#define pRC_CORE_BASIC_RANGE_H
15 Size S = 1,
class F,
class... Xs>
18 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
22 [&f, &args...](
auto const... seq)
24 (f(args..., seq), ...);
29 Size S = 1,
class F,
class... Xs>
31 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
36 f(forward<Xs>(args)...,
i);
41 Size S = 1,
class F,
class... Xs>
43 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
48 f(forward<Xs>(args)..., ((L - I) /
S) *
S + I - (
i - I));
55 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
58 if constexpr((L - I) /
S <= 8)
61 forward<Xs>(args)...);
66 forward<Xs>(args)...);
73 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
82 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
88 template<
Context C, IsSizes I, IsSizes L,
94 requires IsSame<Direction, typename D::Type> &&
95 (L::Dimension == I::Dimension) && (L::Dimension == D::Dimension) &&
96 (L::Dimension == S::Dimension) &&
98 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
101 if constexpr(L::Dimension > 0)
105 auto g = [&f, &args...](
auto const... indices)
109 [&f, &args...](
auto const &indices,
auto const... seq)
111 f(forward<Xs>(args)..., get<seq>(indices)...);
116 using RI =
decltype(
reverse(I()));
117 using RL =
decltype(
reverse(L()));
125 auto g = [&f, &args...](
auto const... indices)
128 [&f, &args..., &indices...](
auto const i)
130 f(forward<Xs>(args)..., i, indices...);
134 using NI =
decltype(
chip<0>(I()));
135 using NL =
decltype(
chip<0>(L()));
143 forward<F>(f)(forward<Xs>(args)...);
151 class F,
class... Xs>
152 requires IsSame<Direction, typename D::Type> &&
153 (L::Dimension == I::Dimension) && (L::Dimension == D::Dimension) &&
154 (L::Dimension == S::Dimension) &&
156 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
162 forward<Xs>(args)...);
167 forward<Xs>(args)...);
175 class F,
class... Xs>
176 requires IsSame<Direction, typename D::Type> &&
177 (L::Dimension == D::Dimension) && (L::Dimension == S::Dimension) &&
179 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
190 class F,
class... Xs>
191 requires IsSame<Direction, typename D::Type> &&
192 (L::Dimension == D::Dimension) && (L::Dimension == S::Dimension) &&
194 [[gnu::always_inline]]
static inline constexpr auto range(F &&f,
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
TN::Subscripts S
Definition externs_nonTT.hpp:9
int i
Definition gmock-matchers-comparisons_test.cc:603
Definition cholesky.hpp:10
static constexpr auto makeConstantSequence()
Definition sequence.hpp:444
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
std::tuple< Ts... > Tuple
Definition basics.hpp:23
static constexpr auto reverse(Direction const D)
Definition direction.hpp:24
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr auto reduce(Sequence< T, I1, I2, Is... > const)
Definition sequence.hpp:458
static constexpr auto makeRange()
Definition sequence.hpp:421
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:584
Context
Definition context.hpp:9
static constexpr auto range(F &&f, Xs &&...args)
Definition range.hpp:18
Direction
Definition direction.hpp:9
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383