16 static constexpr std::size_t Dimension = _dimension;
18 Vector() : d(
new Private) {}
19 Vector(
const _T_ _v[]) : d(
new Private) { memcpy(d->data, _v, _dimension *
sizeof(_T_)); }
20 template<
typename... Params>
21 requires std::conjunction_v<std::is_convertible<Params, _T_>...>
22 Vector(Params... _vs) : d(
new Private)
26 template<
template<
typename, std::
size_t>
class _C_>
27 Vector(
const _C_<_T_, _dimension>& _v) : d(
new Private)
31 template<
typename... Params>
32 void setValue(Params... _vs)
34 static_assert(
sizeof...(Params) == _dimension);
37 template<
template<
typename>
class _C_>
38 cres_qresult<void> copyFrom(
const _C_<_T_>& _v)
40 if(_v.size() == _dimension)
42 for(std::size_t i = 0; i < _dimension; ++i)
46 return cres_success();
50 return cres_failure(
"Invalid size of container got {} expected {}", _v.size(), _dimension);
53 template<
template<
typename, std::
size_t>
class _C_>
54 void copyFrom(
const _C_<_T_, _dimension>& _v)
56 for(std::size_t i = 0; i < _dimension; ++i)
64 for(std::size_t i = 0; i < _dimension; ++i)
71 _T_ operator[](std::size_t _idx)
const {
return d->data[_idx]; }
72 _T_& operator[](std::size_t _idx) {
return d->data[_idx]; }
76 return memcmp(d->data, _rhs.d->data, _dimension *
sizeof(_T_)) == 0;
81 for(std::size_t i = 0; i < _dimension; ++i)
83 if(d->data[i] < _rhs.d->data[i])
88 const _T_* data()
const {
return d->data; }
90 template<std::size_t _idx,
typename... Params>
91 void setValue(_T_ _v, Params... _vs)
94 setValue<_idx + 1>(_vs...);
96 template<std::
size_t _
idx>
102 struct Private :
public QSharedData
105 Private(
const Private& _rhs) : QSharedData()
107 memcpy(data, _rhs.data, _dimension *
sizeof(_T_));
109 _T_ data[_dimension];
111 QSharedDataPointer<Private> d;