3#ifndef pRC_CORE_CONTAINER_SUBSCRIPTS_H
4#define pRC_CORE_CONTAINER_SUBSCRIPTS_H
27 static constexpr auto size()
46 template<IsConvertible<Index>... Ss>
49 : mSubscripts(subscripts...)
66 [
this](
auto index,
auto const... seq)
70 (index /=
size(seq)) %
size(seq + 1)),
76 explicit constexpr operator Index() const
89 [](
auto subscripts,
auto const... seq)
91 [[maybe_unused]]
Index scale = 1;
92 ((subscripts[seq] *= scale, scale *=
size(seq)), ...);
93 return (subscripts[seq] + ... + 0);
98 constexpr decltype(
auto)
operator[](
Index const dimension) &&
100 return move(mSubscripts)[dimension];
103 constexpr decltype(
auto)
operator[](
Index const dimension)
const &&
105 return move(mSubscripts)[dimension];
108 constexpr decltype(
auto)
operator[](
Index const dimension) &
110 return mSubscripts[dimension];
113 constexpr decltype(
auto)
operator[](
Index const dimension)
const &
115 return mSubscripts[dimension];
123 auto lhsE = mSubscripts[
i - 1];
124 auto rhsE = rhs[
i - 1];
152 [
this](
auto const... seq)
160 return *
this %=
Sizes();
167 return *
this = *
this + forward<X>(rhs);
174 return *
this = *
this - forward<X>(rhs);
181 return *
this = *
this * forward<X>(rhs);
188 return *
this = *
this / forward<X>(rhs);
195 return *
this = *
this % forward<X>(rhs);
199 constexpr auto check([[maybe_unused]]
Index const index)
203 if(!(index <
size()))
219 []<
Size... Ns>(Subscripts<Ns...>
const &&)
230 [&lhs, &rhs](
auto const... seq)
232 return Subscripts<Ns...>((lhs[seq] + rhs[seq])...);
241 [&lhs, &rhs](
auto const... seq)
243 return Subscripts<Ns...>((lhs[seq] - rhs[seq])...);
248 requires(
sizeof...(Ns) ==
sizeof...(Ss))
253 [&lhs](
auto const... seq)
262 requires(
sizeof...(Ns) ==
sizeof...(Ss))
266 return rhs *
Sizes<Ss...>();
270 requires(
sizeof...(Ns) ==
sizeof...(Ss))
275 [&lhs](
auto const... seq)
284 requires(
sizeof...(Ns) ==
sizeof...(Ss))
289 [&lhs](
auto const... seq)
301 [&lhs, &rhs](
auto const... seq)
303 return ((lhs[seq] == rhs[seq]) && ...);
311 return !(lhs == rhs);
319 [&
arg](
auto const... seq)
329 [&
arg](
auto const... seq)
340 [&
arg](
auto const... seq)
347 requires requires {
chip<Ds...>(Sequence<
Index, Ns...>()); }
351 [&
arg](
auto const... seq)
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition sequence.hpp:29
static constexpr Size Dimension
Definition sequence.hpp:47
static constexpr auto size()
Definition sequence.hpp:69
Definition subscripts.hpp:21
constexpr auto & operator%=(X &&rhs) &
Definition subscripts.hpp:193
constexpr Subscripts & operator=(Subscripts const &) &=default
constexpr decltype(auto) operator[](Index const dimension) &&
Definition subscripts.hpp:98
constexpr auto & operator+=(X &&rhs) &
Definition subscripts.hpp:165
static constexpr auto size()
Definition subscripts.hpp:27
constexpr auto isOutOfRange() const
Definition subscripts.hpp:149
constexpr Subscripts(Index const index)
Definition subscripts.hpp:53
constexpr Subscripts()=default
constexpr Subscripts & operator=(Subscripts &&) &=default
constexpr Subscripts(Ss const ... subscripts)
Definition subscripts.hpp:48
constexpr auto & operator*=(X &&rhs) &
Definition subscripts.hpp:179
constexpr auto & operator-=(X &&rhs) &
Definition subscripts.hpp:172
constexpr decltype(auto) periodize() &
Definition subscripts.hpp:158
constexpr Subscripts(Index const index)
Definition subscripts.hpp:59
static constexpr auto size(Index const dimension)
Definition subscripts.hpp:33
constexpr Subscripts(Subscripts &&)=default
constexpr Subscripts(Subscripts const &)=default
pRC::Sizes< Ns... > Sizes
Definition subscripts.hpp:23
static constexpr auto Dimension
Definition subscripts.hpp:25
constexpr bool operator<(const Subscripts &rhs) const
Definition subscripts.hpp:118
constexpr auto & operator/=(X &&rhs) &
Definition subscripts.hpp:186
Definition concepts.hpp:31
Definition concepts.hpp:19
Definition subscripts.hpp:217
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 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 reverse(Direction const D)
Definition direction.hpp:24
static constexpr auto makeSeries()
Definition sequence.hpp:390
CommonArray< Allocation::Stack, T, Ns... > StackArray
Definition declarations.hpp:15
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
static constexpr auto arg(T const &a)
Definition arg.hpp:11
static constexpr auto operator==(JacobiRotation< TA > const &a, JacobiRotation< TB > const &b)
Definition jacobi_rotation.hpp:284
static constexpr auto permute(Sequence< T, Is... > const)
Definition sequence.hpp:487
Direction
Definition direction.hpp:9
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
#define BEGIN_IGNORE_DIAGNOSTIC_GCC(warning)
Definition pragma.hpp:42
#define END_IGNORE_DIAGNOSTIC_GCC
Definition pragma.hpp:43