pRC
multi-purpose Tensor Train library for C++
Loading...
Searching...
No Matches
array_scalar.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_CONTAINER_ARRAY_SCALAR_H
4#define pRC_CORE_CONTAINER_ARRAY_SCALAR_H
5
10
11namespace pRC
12{
13 template<Allocation A, class T>
14 class CommonArray<A, T>
15 {
16 public:
18 using Type = T;
20 using Dimension = typename Sizes::Dimension;
21
22 static constexpr auto size()
23 {
24 return Sizes::size();
25 }
26
27 static constexpr auto size(Index const dimension) = delete;
28
29 static constexpr auto indexToSubscripts(Index const index)
30 {
31 return Subscripts<>(index);
32 }
33
34 static constexpr auto subscriptsToIndex()
35 {
36 return Index(Subscripts<>());
37 }
38
39 static constexpr auto subscriptsToIndex(Subscripts<> const &subscripts)
40 {
41 return Index(subscripts);
42 }
43
44 public:
45 ~CommonArray() = default;
46 constexpr CommonArray() = default;
47
48 constexpr CommonArray(CommonArray const &) = default;
49 constexpr CommonArray(CommonArray &&) = default;
50
51 template<pRC::Allocation B, class R, If<IsConvertible<R, T>> = 0>
53 {
54 *this = other;
55 }
56
57 template<class X, If<IsConvertible<X, T>> = 0>
58 constexpr CommonArray(X &&value)
59 : mData(forward<X>(value))
60 {
61 }
62
63 constexpr CommonArray &operator=(CommonArray const &) & = default;
64 constexpr CommonArray &operator=(CommonArray &&) & = default;
65
66 template<pRC::Allocation B, class R, If<IsConvertible<R, T>> = 0>
67 constexpr auto &operator=(CommonArray<B, R> const &rhs) &
68 {
69 operator()() = rhs();
70 return *this;
71 }
72
73 template<class X, If<IsConvertible<X, T>> = 0>
74 constexpr auto &operator=(X &&value) &
75 {
76 operator()() = forward<X>(value);
77 return *this;
78 }
79
80 constexpr decltype(auto) operator()() &&
81 {
82 return move(*this)[0];
83 }
84
85 constexpr decltype(auto) operator()() const &&
86 {
87 return move(*this)[0];
88 }
89
90 constexpr decltype(auto) operator()() &
91 {
92 return operator[](0);
93 }
94
95 constexpr decltype(auto) operator()() const &
96 {
97 return operator[](0);
98 }
99
100 constexpr decltype(auto) operator()(Subscripts<> const &) &&
101 {
102 return move(*this)();
103 }
104
105 constexpr decltype(auto) operator()(Subscripts<> const &) const &&
106 {
107 return move(*this)();
108 }
109
110 constexpr decltype(auto) operator()(Subscripts<> const &) &
111 {
112 return operator()();
113 }
114
115 constexpr decltype(auto) operator()(Subscripts<> const &) const &
116 {
117 return operator()();
118 }
119
120 constexpr decltype(auto) operator[](Index const index) &&
121 {
122 return move(mData)[index];
123 }
124
125 constexpr decltype(auto) operator[](Index const index) const &&
126 {
127 return move(mData)[index];
128 }
129
130 constexpr decltype(auto) operator[](Index const index) &
131 {
132 return mData[index];
133 }
134
135 constexpr decltype(auto) operator[](Index const index) const &
136 {
137 return mData[index];
138 }
139
140 constexpr auto data() && = delete;
141 constexpr auto data() const && = delete;
142
144 {
145 return mData.data();
146 }
147
148 constexpr auto data() const &
149 {
150 return mData.data();
151 }
152
153 private:
155 };
156}
157#endif // pRC_CORE_CONTAINER_ARRAY_SCALAR_H
constexpr auto & operator=(CommonArray< B, R > const &rhs) &
Definition array_scalar.hpp:67
constexpr auto data() const &&=delete
static constexpr auto size()
Definition array_scalar.hpp:22
static constexpr auto subscriptsToIndex()
Definition array_scalar.hpp:34
constexpr auto data() &&=delete
typename Sizes::Dimension Dimension
Definition array_scalar.hpp:20
static constexpr auto indexToSubscripts(Index const index)
Definition array_scalar.hpp:29
Constant< pRC::Allocation, A > Allocation
Definition array_scalar.hpp:17
static constexpr auto subscriptsToIndex(Subscripts<> const &subscripts)
Definition array_scalar.hpp:39
constexpr CommonArray & operator=(CommonArray &&) &=default
static constexpr auto size(Index const dimension)=delete
constexpr CommonArray(CommonArray< B, R > const &other)
Definition array_scalar.hpp:52
T Type
Definition array_scalar.hpp:18
constexpr CommonArray(CommonArray const &)=default
constexpr auto & operator=(X &&value) &
Definition array_scalar.hpp:74
constexpr CommonArray(X &&value)
Definition array_scalar.hpp:58
constexpr CommonArray & operator=(CommonArray const &) &=default
constexpr CommonArray(CommonArray &&)=default
constexpr CommonArray()=default
constexpr auto data() const &
Definition array_scalar.hpp:148
Definition type_traits.hpp:49
Definition sequence.hpp:56
static constexpr auto size()
Definition sequence.hpp:88
Constant< Size, sizeof...(Ns)> Dimension
Definition sequence.hpp:74
Definition subscripts.hpp:20
Definition cholesky.hpp:18
std::integral_constant< T, V > Constant
Definition type_traits.hpp:34
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
Size Index
Definition type_traits.hpp:21