14 static constexpr std::size_t Dimension = _dimension;
16 Vector() : d(
new Private) {}
17 Vector(
const _T_ _v[]) : d(
new Private) { memcpy(d->data, _v, _dimension *
sizeof(_T_)); }
18 template<
typename... Params>
requires std::conjunction_v<std::is_convertible<Params, _T_>...>
19 Vector(Params... _vs) : d(
new Private) { setValue(_vs...); }
20 template<
template<
typename, std::
size_t>
class _C_>
21 Vector(
const _C_<_T_, _dimension>& _v) : d(
new Private)
25 template<
typename... Params>
26 void setValue(Params... _vs)
28 static_assert(
sizeof...(Params) == _dimension);
31 template<
template<
typename>
class _C_>
34 if(_v.size() == _dimension)
36 for(std::size_t i = 0; i < _dimension; ++i)
42 return kCrvError(
"Invalid size of container got {} expected {}", _v.size(), _dimension);
45 template<
template<
typename, std::
size_t>
class _C_>
46 void copyFrom(
const _C_<_T_, _dimension>& _v)
48 for(std::size_t i = 0; i < _dimension; ++i)
56 for(std::size_t i = 0; i < _dimension; ++i)
63 _T_ operator[](std::size_t _idx)
const {
return d->data[_idx]; }
64 _T_& operator[](std::size_t _idx) {
return d->data[_idx]; }
68 return memcmp(d->data, _rhs.d->data, _dimension *
sizeof(_T_)) == 0;
72 return not (*
this == _rhs);
76 for(std::size_t i = 0; i < _dimension; ++i)
78 if(d->data[i] < _rhs.d->data[i])
return true;
82 const _T_* data()
const
87 template<std::size_t _idx,
typename... Params>
88 void setValue(_T_ _v, Params... _vs)
91 setValue<_idx + 1>(_vs...);
93 template<std::
size_t _
idx>
99 struct Private :
public QSharedData
102 Private(
const Private& _rhs) : QSharedData() { memcpy(data, _rhs.data, _dimension *
sizeof(_T_)); }
103 _T_ data[_dimension];
105 QSharedDataPointer<Private> d;