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) && ...);
352 template<
class T,
T...
Seq,
class F,
class...
Xs,
360 template<
class T, T N>
363 return Sequence(std::make_integer_sequence<T, N>());
411 template<
class T, Size N, T V>
424 template<
class F,
class T,
T I1,
T I2,
T...
Is,
428 constexpr auto I = F()(
I1,
I2);
430 if constexpr(
sizeof...(Is) == 0)
440 template<
class F,
class T, T I>
455 template<
class T,
T...
Is>
463 sizeof...(
is) -
Size(1) -
is)...>();
474 if constexpr(
Step == 0)
499 If<
IsSatisfied<((Sequence<T, Is...>::size() == Seqs::size()) && ...)>> =
505 if constexpr(
O < S::size() - 1)
507 return (
Sequence<
T, S::value(
O), Seqs::value(
O)...>(),
512 return Sequence<
T, S::value(
O), Seqs::value(
O)...>();
516 template<
class F,
class T,
T...
Is>
519 if constexpr(
sizeof...(Is) == 0)
523 else if constexpr(
sizeof...(Is) == 1)
525 if constexpr(F()(
Is...))
540 template<
class F,
class T,
T...
As,
T...
Bs,
class...
Seqs,
542 If<
IsSatisfied<((Sequence<T, As...>::size() == Seqs::size()) && ... &&
543 (Sequence<T, As...>::size() == Sequence<T, Bs...>::size()))>> = 0>
547 if constexpr(
sizeof...(Seqs) == 0)
563 if constexpr(
sizeof...(Ds) != 0)
572 [](
auto const...
seq)
579 template<
class T,
T...
Is>
591 if constexpr(
sizeof...(Ss) != 0)
602 template<
class T,
T...
Is>
632 template<
class F = Less,
class T,
T I,
T...
Is,
636 if constexpr(
sizeof...(Is) == 0)
640 else if constexpr((F()(
I,
Is) && ...))
652 sizeof...(Froms) ==
sizeof...(
Ps))>> = 0>
663 else if constexpr(
sizeof...(Froms) > 0)
692 template<
class T,
T N,
T...
Ps>
696 constexpr auto P = []()
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
T Type
Definition sequence.hpp:36
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
Definition cholesky.hpp:18
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:589
static constexpr auto reduce(Sequence< T, I1, I2, Is... > const)
Definition sequence.hpp:426
static constexpr auto rotate(Sequence< T, First, Is... > const)
Definition sequence.hpp:470
static constexpr auto integerFactorization(Constant< T, N > const, Sequence< T, Ps... > const =Sequence< T >())
Definition sequence.hpp:693
static constexpr auto operator<(X &&a, Zero<> const)
Definition less.hpp:12
bool Bool
Definition type_traits.hpp:18
static constexpr auto makeConstantSequence()
Definition sequence.hpp:412
static constexpr T iSqrt(T const a)
Definition isqrt.hpp:12
static constexpr auto makeSeriesFor()
Definition sequence.hpp:367
static constexpr auto reverse(Direction const D)
Definition direction.hpp:24
static constexpr auto filter(Sequence< T, Is... > const)
Definition sequence.hpp:517
static constexpr auto zip(Sequence< T, Is... > const, Seqs const ...)
Definition sequence.hpp:501
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
std::size_t Size
Definition type_traits.hpp:20
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:544
static constexpr auto operator*(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:311
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134
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:611
static constexpr auto makeRange()
Definition sequence.hpp:389
std::integral_constant< T, V > Constant
Definition type_traits.hpp:34
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:361
static constexpr auto operator/(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:169
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
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:450
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:623
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
Direction
Definition direction.hpp:9
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:561
static constexpr auto getPermutation(Sequence< T, From, Froms... > const, Sequence< T, To, Tos... > const, Sequence< T, P, Ps... > const)
Definition sequence.hpp:653
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
forwards the values in a pRC::Sequence to a function as parameters
Definition sequence.hpp:354
static constexpr auto operator<=(X &&a, Zero<> const)
Definition less_equal.hpp:12
Size Index
Definition type_traits.hpp:21
static constexpr X max(X &&a)
Definition max.hpp:13