3#ifndef pRC_CORE_CONTAINER_ARRAY_H
4#define pRC_CORE_CONTAINER_ARRAY_H
27 static constexpr auto size()
43 template<IsConvertible<Index>... Is>
46 (
sizeof...(Is) == Dimension)
56 return Index(subscripts);
60 static consteval auto flattenable()
87 : mData(move(other.mData))
91 template<pRC::Allocation B, IsConvertible<T> R>
99 return operator= <A,
T>(rhs);
105 [
this, &rhs](
auto const i)
107 (*this)[
i] = move(rhs[
i]);
115 mData = move(rhs.mData);
119 template<pRC::Allocation B, IsConvertible<T> R>
123 [
this, &rhs](
auto const i)
130 template<IsConvertible<Index>... Is>
131 requires(
sizeof...(Is) ==
sizeof...(Ns))
133 Is
const... subscripts) &&
135 return move(mData)(subscripts...)[subscript];
138 template<IsConvertible<Index>... Is>
139 requires(
sizeof...(Is) ==
sizeof...(Ns))
141 Is
const... subscripts)
const &&
143 return move(mData)(subscripts...)[subscript];
146 template<IsConvertible<Index>... Is>
147 requires(
sizeof...(Is) ==
sizeof...(Ns))
149 Is
const... subscripts) &
151 return mData(subscripts...)[subscript];
154 template<IsConvertible<Index>... Is>
155 requires(
sizeof...(Is) ==
sizeof...(Ns))
157 Is
const... subscripts)
const &
159 return mData(subscripts...)[subscript];
162 constexpr decltype(
auto)
operator()(
167 [
this](
auto const &subscripts,
168 auto const... seq) ->
decltype(
auto)
170 return move(*
this)(subscripts[seq]...);
175 constexpr decltype(
auto)
operator()(
176 Subscripts<N, Ns...>
const &subscripts)
const &&
180 [
this](
auto const &subscripts,
181 auto const... seq) ->
decltype(
auto)
183 return move(*
this)(subscripts[seq]...);
188 constexpr decltype(
auto)
operator()(
193 [
this](
auto const &subscripts,
194 auto const... seq) ->
decltype(
auto)
196 return this->operator()(subscripts[seq]...);
201 constexpr decltype(
auto)
operator()(
202 Subscripts<N, Ns...>
const &subscripts)
const &
206 [
this](
auto const &subscripts,
207 auto const... seq) ->
decltype(
auto)
209 return this->operator()(subscripts[seq]...);
214 constexpr decltype(
auto)
operator[](
Index const index) &&
215 requires(flattenable())
218 *
reinterpret_cast<StackArray<
T, size()
> *>(data()))[index];
221 constexpr decltype(
auto)
operator[](
Index const index)
const &&
222 requires(flattenable())
224 return move(*
reinterpret_cast<StackArray<
T, size()
> const *>(
228 constexpr decltype(
auto)
operator[](
Index const index) &
229 requires(flattenable())
231 return (*
reinterpret_cast<StackArray<
T, size()
> *>(data()))[index];
234 constexpr decltype(
auto)
operator[](
Index const index)
const &
235 requires(flattenable())
237 return (*
reinterpret_cast<StackArray<
T, size()
> const *>(
241 constexpr auto data() && =
delete;
242 constexpr auto data() const && = delete;
244 constexpr auto data() &
constexpr CommonArray(StackArray< T, N, Ns... > &&other)
Definition array.hpp:79
constexpr CommonArray(CommonArray const &other)
Definition array.hpp:74
constexpr decltype(auto) operator()(Index const subscript, Is const ... subscripts) const &&
Definition array.hpp:140
constexpr CommonArray & operator=(CommonArray &&rhs) &
Definition array.hpp:102
constexpr decltype(auto) operator()(Index const subscript, Is const ... subscripts) &
Definition array.hpp:148
static constexpr auto subscriptsToIndex(Is const ... subscripts)
Definition array.hpp:47
static constexpr auto size()
Definition array.hpp:27
constexpr CommonArray(HeapArray< T, N, Ns... > &&other)
Definition array.hpp:85
static constexpr auto subscriptsToIndex(Subscripts< N, Ns... > const &subscripts)
Definition array.hpp:52
constexpr auto data() const &&=delete
constexpr auto & operator=(CommonArray< B, R, N, Ns... > const &rhs) &
Definition array.hpp:120
constexpr CommonArray & operator=(CommonArray const &rhs) &
Definition array.hpp:97
constexpr decltype(auto) operator()(Index const subscript, Is const ... subscripts) &&
Definition array.hpp:132
static constexpr auto indexToSubscripts(Index const index)
Definition array.hpp:37
constexpr decltype(auto) operator()(Index const subscript, Is const ... subscripts) const &
Definition array.hpp:156
constexpr CommonArray & operator=(CommonArray &&rhs) &
Definition array.hpp:113
constexpr auto data() &&=delete
constexpr auto data() const &
Definition array.hpp:249
constexpr CommonArray()=default
static constexpr auto size(Index const dimension)
Definition array.hpp:32
constexpr CommonArray(CommonArray< B, R, N, Ns... > const &other)
Definition array.hpp:92
Definition declarations.hpp:12
Definition sequence.hpp:29
static constexpr Size Dimension
Definition sequence.hpp:47
static constexpr auto size()
Definition sequence.hpp:69
Definition subscripts.hpp:21
Definition concepts.hpp:37
Definition concepts.hpp:19
Definition concepts.hpp:52
pRC::Float<> T
Definition externs_nonTT.hpp:1
int i
Definition gmock-matchers-comparisons_test.cc:603
Definition cholesky.hpp:10
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
static constexpr auto makeSeries()
Definition sequence.hpp:390
CommonArray(T const (&)[N]) -> CommonArray< Allocation::Stack, T, N >
static constexpr auto range(F &&f, Xs &&...args)
Definition range.hpp:18
Allocation
Definition allocation.hpp:18
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