3#ifndef pRC_CORE_BASIC_SEQUENCE_H
4#define pRC_CORE_BASIC_SEQUENCE_H
27 template<
class T,
T... Seq>
31 static constexpr auto linearizable()
33 if constexpr(((Seq != 0) && ...))
60 return Array{Seq...}[index];
69 static constexpr auto size()
72 return (Seq * ... *
T(1));
83 explicit constexpr operator T() const
84 requires requires {
size(); }
93 []<
class U, U... Seq>(Sequence<U, Seq...> const &&)
105 template<
class T,
T... As,
T... Bs>
113 template<
class T,
T... As,
T B>
114 requires IsInvocable<Add, T, T>
121 template<
class T,
T A,
T... Bs>
122 requires IsInvocable<Add, T, T>
129 template<
class T,
T... As,
T... Bs>
130 requires IsInvocable<Sub, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
137 template<
class T,
T... As,
T B>
138 requires IsInvocable<Sub, T, T>
145 template<
class T,
T A,
T... Bs>
146 requires IsInvocable<Sub, T, T>
153 template<
class T,
T... As,
T... Bs>
154 requires IsInvocable<Mul, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
161 template<
class T,
T... As,
T B>
162 requires IsInvocable<Mul, T, T>
169 template<
class T,
T A,
T... Bs>
170 requires IsInvocable<Mul, T, T>
177 template<
class T,
T... As,
T... Bs>
178 requires IsInvocable<Div, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
185 template<
class T,
T... As,
T B>
186 requires IsInvocable<Div, T, T>
193 template<
class T,
T A,
T... Bs>
194 requires IsInvocable<Div, T, T>
201 template<
class T,
T... As,
T... Bs>
202 requires IsInvocable<Mod, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
209 template<
class T,
T... As,
T B>
210 requires IsInvocable<Mod, T, T>
217 template<
class T,
T A,
T... Bs>
218 requires IsInvocable<Mod, T, T>
225 template<
class T,
T... Is>
226 requires IsInvocable<Minus, T>
232 template<
class T,
T... As,
T... Bs>
239 template<IsSequence A, IsSequence B>
245 template<
class T,
T... As,
T B>
246 requires IsInvocable<Equal, T, T>
250 return ((As == B) && ...);
253 template<
class T,
T A,
T... Bs>
254 requires IsInvocable<Equal, T, T>
258 return ((A == Bs) && ...);
261 template<IsSequence A, IsSequence B>
267 template<
class T,
T... As,
T B>
268 requires IsInvocable<NotEqual, T, T>
272 return ((As != B) || ...);
275 template<
class T,
T A,
T... Bs>
276 requires IsInvocable<NotEqual, T, T>
280 return ((A != Bs) || ...);
283 template<
class T,
T... As,
T... Bs>
284 requires IsInvocable<LessEqual, T, T> &&
285 (
sizeof...(As) ==
sizeof...(Bs))
289 return ((As <= Bs) && ...);
292 template<
class T,
T... As,
T B>
293 requires IsInvocable<LessEqual, T, T>
297 return ((As <= B) && ...);
300 template<
class T,
T A,
T... Bs>
301 requires IsInvocable<LessEqual, T, T>
305 return ((A <= Bs) && ...);
308 template<
class T,
T... As,
T... Bs>
309 requires IsInvocable<GreaterEqual, T, T> &&
310 (
sizeof...(As) ==
sizeof...(Bs))
314 return ((As >= Bs) && ...);
317 template<
class T,
T... As,
T B>
318 requires IsInvocable<GreaterEqual, T, T>
322 return ((As >= B) && ...);
325 template<
class T,
T A,
T... Bs>
326 requires IsInvocable<GreaterEqual, T, T>
330 return ((A >= Bs) && ...);
333 template<
class T,
T... As,
T... Bs>
334 requires IsInvocable<Less, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
338 return ((As < Bs) && ...);
341 template<
class T,
T... As,
T B>
342 requires IsInvocable<Less, T, T>
346 return ((As < B) && ...);
349 template<
class T,
T A,
T... Bs>
350 requires IsInvocable<Less, T, T>
354 return ((A < Bs) && ...);
357 template<
class T,
T... As,
T... Bs>
358 requires IsInvocable<Greater, T, T> && (
sizeof...(As) ==
sizeof...(Bs))
362 return ((As > Bs) && ...);
365 template<
class T,
T... As,
T B>
366 requires IsInvocable<Greater, T, T>
370 return ((As > B) && ...);
373 template<
class T,
T A,
T... Bs>
374 requires IsInvocable<Greater, T, T>
378 return ((A > Bs) && ...);
381 template<
class T,
T... Seq,
class F,
class... Xs>
389 template<
class T, T N>
392 return []<
T... Ns>(std::integer_sequence<
T, Ns...>
const)
395 }(std::make_integer_sequence<T, N>());
404 template<
class T,
class... Ts>
405 requires(
sizeof...(Ts) > 0)
411 template<
class T,
auto... Ts>
412 requires(
sizeof...(Ts) > 0)
423 if constexpr(First >= Last)
443 template<
class T, Size N, T V>
456 template<
class F,
class T,
T I1,
T I2,
T... Is>
457 requires IsInvocable<F, T, T>
460 constexpr auto I = F()(I1, I2);
462 if constexpr(
sizeof...(Is) == 0)
472 template<
class F,
class T, T I>
478 template<
class F,
class T>
484 template<
Index... Ps,
class T,
T... Is>
485 requires((
sizeof...(Is) ==
sizeof...(Ps))) &&
486 (((Ps <
sizeof...(Is)) && ...))
492 template<
class T,
T... Is>
500 sizeof...(is) -
Size(1) - is)...>();
509 [](
auto const... seq)
513 return permute<(seq + Step %
sizeof...(Is)) %
519 (
sizeof...(Is) - Step %
sizeof...(Is))) %
525 template<
Index O = 0,
class T,
T... Is,
class... Seqs>
527 static inline constexpr auto
zip(
Sequence<
T, Is...> const, Seqs const...)
531 if constexpr(O < S::size() - 1)
533 return (
Sequence<
T, S::value(O), Seqs::value(O)...>(),
538 return Sequence<
T, S::value(O), Seqs::value(O)...>();
542 template<
class F,
class T,
T... Is>
545 if constexpr(
sizeof...(Is) == 0)
549 else if constexpr(
sizeof...(Is) == 1)
551 if constexpr(F()(Is...))
566 template<
class F,
class T,
T... As,
T... Bs,
class... Seqs>
567 requires IsInvocable<F, T, T> && (
sizeof...(As) ==
sizeof...(Bs)) &&
568 ((
sizeof...(As) == Seqs::Dimension) && ...)
572 if constexpr(
sizeof...(Seqs) == 0)
583 requires(
sizeof...(Ds) <
sizeof...(Is) &&
max(
D, Ds...) <
sizeof...(Is))
586 if constexpr(
sizeof...(Ds) != 0)
588 return chip<((Ds <
D) ? Ds : Ds - 1)...>(
595 [](
auto const... seq)
602 template<
class T,
T... Is>
609 requires(
sizeof...(Ss) <
sizeof...(Is) &&
max(
S, Ss...) <
sizeof...(Is))
612 if constexpr(
sizeof...(Ss) != 0)
623 template<
class T,
T... Is>
630 requires(
sizeof...(Is) % B == 0 && P < B)
642 requires(L <=
sizeof...(Is) && I < L)
652 template<
class F = Less,
class T,
T I,
T... Is>
653 requires IsPredicate<F, T, T>
656 if constexpr(
sizeof...(Is) == 0)
660 else if constexpr((F()(I, Is) && ...))
670 template<
class T,
T From,
T... Froms,
T To,
T... Tos,
T P,
T... Ps>
671 requires(
sizeof...(Froms) ==
sizeof...(Tos) &&
672 sizeof...(Froms) ==
sizeof...(Ps))
678 if constexpr(From != To)
683 else if constexpr(
sizeof...(Froms) > 0)
696 template<
class T,
T... Froms,
T... Tos>
697 requires(
sizeof...(Froms) ==
sizeof...(Tos))
705 template<
class T,
T... Froms>
712 template<
class T,
T N,
T... Ps>
716 constexpr auto P = []()
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition sequence.hpp:29
static constexpr Size Dimension
Definition sequence.hpp:47
constexpr Sequence(Sequence const &)=default
static constexpr auto value(Index const index)
Definition sequence.hpp:49
constexpr Sequence & operator=(Sequence &&) &=default
constexpr Sequence(Sequence &&)=default
constexpr Sequence()=default
static constexpr auto size(Index const index)
Definition sequence.hpp:63
static constexpr auto size()
Definition sequence.hpp:69
constexpr Sequence & operator=(Sequence const &) &=default
Definition concepts.hpp:31
Definition concepts.hpp:19
Definition concepts.hpp:28
Definition sequence.hpp:91
Definition concepts.hpp:61
Definition sequence.hpp:103
TN::Subscripts S
Definition externs_nonTT.hpp:9
pRC::Float<> T
Definition externs_nonTT.hpp:1
int value
Definition gmock-actions_test.cc:1714
int i
Definition gmock-matchers-comparisons_test.cc:603
static void error(Xs &&...args)
Definition log.hpp:14
Definition cholesky.hpp:10
static constexpr auto integerFactorization(Constant< T, N > const, Sequence< T, Ps... > const =Sequence< T >())
Definition sequence.hpp:713
static constexpr auto makeConstantSequence()
Definition sequence.hpp:444
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:610
static constexpr auto ceilDiv(TA const a, TB const b)
Definition ceil_div.hpp:13
static constexpr auto operator<=(X &&a, T< Void > const)
Definition less_equal.hpp:16
static constexpr auto operator>=(X &&a, T< Void > const)
Definition greater_equal.hpp:16
static constexpr auto operator-(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:131
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
static constexpr auto makeSeriesFor()
Definition sequence.hpp:399
static constexpr auto rotate(Sequence< T, Is... > const)
Definition sequence.hpp:506
static constexpr auto pick(Sequence< T, As... > const, Sequence< T, Bs... > const, Seqs const ...)
Definition sequence.hpp:569
static constexpr auto reverse(Direction const D)
Definition direction.hpp:24
static constexpr auto filter(Sequence< T, Is... > const)
Definition sequence.hpp:543
static constexpr auto trim(Sequence< T, Is... > const)
Definition sequence.hpp:643
static constexpr auto operator*(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:298
static constexpr auto operator<(X &&a, T< Void > const)
Definition less.hpp:16
static constexpr auto zip(Sequence< T, Is... > const, Seqs const ...)
Definition sequence.hpp:527
static constexpr auto operator,(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:233
Conditional<((Ns *... *1) *sizeof(T) > cHugepageSizeByte), HeapArray< T, Ns... >, StackArray< T, Ns... > > Array
Definition declarations.hpp:21
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr auto operator%(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:203
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 operator>(X &&a, T< Void > const)
Definition greater.hpp:16
static constexpr T iSqrt(T const a)
Definition isqrt.hpp:12
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:584
static constexpr auto operator!=(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:291
constexpr auto cDebugLevel
Definition config.hpp:48
std::integral_constant< T, V > Constant
Definition basics.hpp:38
static constexpr auto operator==(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:284
static constexpr auto cut(Sequence< T, Is... > const)
Definition sequence.hpp:631
static constexpr auto permute(Sequence< T, Is... > const)
Definition sequence.hpp:487
Direction
Definition direction.hpp:9
static constexpr auto getPermutation(Sequence< T, From, Froms... > const, Sequence< T, To, Tos... > const, Sequence< T, P, Ps... > const)
Definition sequence.hpp:673
static constexpr auto operator+(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:107
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383
static constexpr auto operator/(Sequence< T, As... > const, Sequence< T, Bs... > const)
Definition sequence.hpp:179
static constexpr void sort(C const &compare, T &a, Size const k=T::size(), Size const d=0)
Definition sort.hpp:15
static constexpr decltype(auto) max(X &&a)
Definition max.hpp:13
Definition identity.hpp:11