3#ifndef pRC_CORE_BASIC_SEQUENCE_H
4#define pRC_CORE_BASIC_SEQUENCE_H
26 template<
class T,
T...
Seq>
32 template<
class T,
T...
Seq>
51 constexpr Sequence(std::integer_sequence<T, Seq...>
const) {}
58 static constexpr auto linearizable()
60 if constexpr(((
Ns != 0) && ...))
87 template<
class E = IsLinearizable, If<E> = 0>
88 static constexpr auto size()
90 return (
Ns * ... *
Size(1));
100 constexpr Sequence(std::integer_sequence<Size, Ns...>
const) {}
102 explicit constexpr operator Size()
const
203 template<
class T,
T...
As,
T...
Bs>
210 template<
class T,
T...
As,
T...
Bs,
215 return ((
As ==
Bs) && ...);
218 template<
class T,
T...
As,
T B>
222 return ((
As ==
B) && ...);
225 template<
class T,
T A,
T...
Bs>
229 return ((
A ==
Bs) && ...);
232 template<
class T,
T...
As,
T...
Bs,
237 return ((
As !=
Bs) || ...);
240 template<
class T,
T...
As,
T B>
244 return ((
As !=
B) || ...);
247 template<
class T,
T A,
T...
Bs>
251 return ((
A !=
Bs) || ...);
259 return ((
As <=
Bs) && ...);
266 return ((
As <=
B) && ...);
273 return ((
A <=
Bs) && ...);
281 return ((
As >=
Bs) && ...);
288 return ((
As >=
B) && ...);
295 return ((
A >=
Bs) && ...);
303 return ((
As <
Bs) && ...);
310 return ((
As <
B) && ...);
317 return ((
A <
Bs) && ...);
325 return ((
As >
Bs) && ...);
332 return ((
As >
B) && ...);
339 return ((
A >
Bs) && ...);
342 template<
class T,
T...
Seq,
class F,
class...
Xs,
350 template<
class T, T N>
353 return Sequence(std::make_integer_sequence<T, N>());
401 template<
class T, Size N, T V>
414 template<
class F,
class T,
T I1,
T I2,
T...
Is,
418 constexpr auto I = F()(
I1,
I2);
420 if constexpr(
sizeof...(Is) == 0)
430 template<
class F,
class T, T I>
445 template<
class T,
T...
Is>
453 sizeof...(
is) -
Size(1) -
is)...>();
464 if constexpr(
Step == 0)
489 If<
IsSatisfied<((Sequence<T, Is...>::size() == Seqs::size()) && ...)>> =
495 if constexpr(
O < S::size() - 1)
497 return (
Sequence<
T, S::value(
O), Seqs::value(
O)...>(),
502 return Sequence<
T, S::value(
O), Seqs::value(
O)...>();
506 template<
class F,
class T,
T...
Is>
509 if constexpr(
sizeof...(Is) == 0)
513 else if constexpr(
sizeof...(Is) == 1)
515 if constexpr(F()(
Is...))
530 template<
class F,
class T,
T...
As,
T...
Bs,
class...
Seqs,
532 If<
IsSatisfied<((Sequence<T, As...>::size() == Seqs::size()) && ... &&
533 (Sequence<T, As...>::size() == Sequence<T, Bs...>::size()))>> = 0>
537 if constexpr(
sizeof...(Seqs) == 0)
553 if constexpr(
sizeof...(Ds) != 0)
562 [](
auto const...
seq)
569 template<
class T,
T...
Is>
581 if constexpr(
sizeof...(Ss) != 0)
592 template<
class T,
T...
Is>
622 template<
class F = Less,
class T,
T I,
T...
Is,
626 if constexpr(
sizeof...(Is) == 0)
630 else if constexpr((F()(
I,
Is) && ...))
642 sizeof...(Froms) ==
sizeof...(
Ps))>> = 0>
653 else if constexpr(
sizeof...(Froms) > 0)
682 template<
class T,
T N,
T...
Ps>
686 constexpr auto P = []()
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition type_traits.hpp:49
Definition sequence.hpp:56
constexpr Sequence()=default
static constexpr auto value(Index const index)
Definition sequence.hpp:77
constexpr Sequence & operator=(Sequence const &) &=default
Size Type
Definition sequence.hpp:73
static constexpr auto size()
Definition sequence.hpp:88
constexpr Sequence(Sequence &&)=default
Constant< Size, sizeof...(Ns)> Dimension
Definition sequence.hpp:74
constexpr Sequence & operator=(Sequence &&) &=default
static constexpr auto size(Index const index)
Definition sequence.hpp:82
constexpr Sequence(std::integer_sequence< Size, Ns... > const)
Definition sequence.hpp:100
Constant< Bool, linearizable()> IsLinearizable
Definition sequence.hpp:75
constexpr Sequence(Sequence const &)=default
Definition sequence.hpp:34
constexpr Sequence(Sequence const &)=default
static constexpr auto value(Index const index)
Definition sequence.hpp:39
Constant< Size, sizeof...(Seq)> Dimension
Definition sequence.hpp:37
constexpr Sequence & operator=(Sequence &&) &=default
constexpr Sequence(Sequence &&)=default
constexpr Sequence()=default
constexpr Sequence(std::integer_sequence< T, Seq... > const)
Definition sequence.hpp:51
constexpr Sequence & operator=(Sequence const &) &=default
TN::Subscripts S
Definition externs_nonTT.hpp:9
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:18
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:579
bool Bool
Definition type_traits.hpp:18
static constexpr auto reduce(Sequence< T, I1, I2, Is... > const)
Definition sequence.hpp:416
static constexpr auto rotate(Sequence< T, First, Is... > const)
Definition sequence.hpp:460
static constexpr auto integerFactorization(Constant< T, N > const, Sequence< T, Ps... > const =Sequence< T >())
Definition sequence.hpp:683
static constexpr auto operator<(X &&a, Zero<> const)
Definition less.hpp:12
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
static constexpr T iSqrt(T const a)
Definition isqrt.hpp:12
Size Index
Definition type_traits.hpp:21
std::size_t Size
Definition type_traits.hpp:20
static constexpr auto makeSeriesFor()
Definition sequence.hpp:357
static constexpr auto reverse(Direction const D)
Definition direction.hpp:24
static constexpr auto filter(Sequence< T, Is... > const)
Definition sequence.hpp:507
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
static constexpr auto zip(Sequence< T, Is... > const, Seqs const ...)
Definition sequence.hpp:491
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto operator-(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:132
static constexpr auto pick(Sequence< T, As... > const, Sequence< T, Bs... > const, Seqs const ...)
Definition sequence.hpp:534
static constexpr auto operator*(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:311
static constexpr auto operator%(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:184
static constexpr auto cut(Sequence< T, Is... > const)
Definition sequence.hpp:601
static constexpr auto makeRange()
Definition sequence.hpp:379
static constexpr auto operator,(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:204
static constexpr void sort(C const &compare, T &a, Size const k=T::size(), Size const d=0)
Definition sort.hpp:15
static constexpr auto makeSeries()
Definition sequence.hpp:351
static constexpr auto operator/(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:169
static constexpr auto operator!=(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:304
static constexpr auto operator>(X &&a, Zero<> const)
Definition greater.hpp:12
static constexpr auto permute(Sequence< T, Is... > const)
Definition sequence.hpp:440
std::integral_constant< T, V > Constant
Definition type_traits.hpp:34
static constexpr auto operator==(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:297
static constexpr auto trim(Sequence< T, Is... > const)
Definition sequence.hpp:613
static constexpr auto operator+(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:110
static constexpr auto operator>=(X &&a, Zero<> const)
Definition greater_equal.hpp:12
Sequence(std::integer_sequence< T, Seq... > const) -> Sequence< T, Seq... >
Direction
Definition direction.hpp:9
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:551
static constexpr auto getPermutation(Sequence< T, From, Froms... > const, Sequence< T, To, Tos... > const, Sequence< T, P, Ps... > const)
Definition sequence.hpp:643
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:344
static constexpr auto operator<=(X &&a, Zero<> const)
Definition less_equal.hpp:12
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134
static constexpr X max(X &&a)
Definition max.hpp:13