3#ifndef pRC_CORE_BASIC_RANGE_H
4#define pRC_CORE_BASIC_RANGE_H
15 Size S = 1,
class F,
class...
Xs>
16 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
24 (f(args..., seq), ...);
35 f(forward<Xs>(
args)...,
i);
39 f(forward<Xs>(
args)..., L +
I -
S -
i);
48 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
51 if constexpr((L -
I) /
S <= 8)
54 forward<Xs>(
args)...);
59 forward<Xs>(
args)...);
65 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
73 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
85 If<IsSame<
typename I::Dimension,
typename L::Dimension,
86 typename D::Dimension,
typename S::Dimension>> = 0,
90 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
93 if constexpr(
typename L::Dimension() > 0)
99 constexpr auto N =
typename L::Dimension();
105 f(forward<Xs>(args)..., get<seq>(indices)...);
124 f(forward<Xs>(args)..., i, indices...);
149 If<IsSame<
typename I::Dimension,
typename L::Dimension,
150 typename S::Dimension,
typename D::Dimension>> = 0,
154 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
165 If<IsSame<
typename L::Dimension,
typename D::Dimension,
166 typename S::Dimension>> = 0,
170 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
185 If<IsSame<
typename L::Dimension,
typename S::Dimension,
186 typename D::Dimension>> = 0,
190 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
204 If<IsSame<
typename I::Dimension,
typename L::Dimension,
205 typename D::Dimension,
typename S::Dimension>> = 0,
209 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
212 if constexpr(
typename L::Dimension() == 0)
215 forward<Xs>(
args)...);
220 forward<Xs>(
args)...);
225 forward<Xs>(
args)...);
237 If<IsSame<
typename I::Dimension,
typename L::Dimension,
238 typename S::Dimension,
typename D::Dimension>> = 0,
242 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
253 If<IsSame<
typename L::Dimension,
typename D::Dimension,
254 typename S::Dimension>> = 0,
258 [[gnu::always_inline]]
static inline constexpr auto range(F &&
f,
273 If<IsSame<
typename L::Dimension,
typename S::Dimension,
274 typename D::Dimension>> = 0,
278 [[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
Definition cholesky.hpp:18
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 auto reverse(Direction const D)
Definition direction.hpp:24
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto range(F &&f, Xs &&...args)
Definition range.hpp:16
Context
Definition context.hpp:9
Direction
Definition direction.hpp:9
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:344