21 m_data.resize(totalSize());
25 : m_data(_data), m_dimensions(_dimensions)
27 clog_assert(m_data.size() == totalSize());
29 template<
int _v_dimension_>
30 cres_qresult<Vector<_T_, _v_dimension_>> toVector()
const
32 if(m_dimensions.size() == 1 and m_dimensions[0] == _v_dimension_)
36 return cres_success(v);
41 "Invalid conversion from array of dimensions {} to vector of dimension {}", m_dimensions,
45 template<
typename _RList_ = QList<_T_>>
46 cres_qresult<_RList_> toList()
const
48 switch(m_dimensions.size())
53 return cres_success(m_data.toList());
55 return cres_failure(
"Invalid conversion from array of dimensions {} to list.",
59 template<
int _v_dimension_>
60 cres_qresult<QList<Vector<_T_, _v_dimension_>>> toVectorList()
const
62 if(m_dimensions.size() == 2)
64 if(m_dimensions[1] != _v_dimension_)
67 "Invalid conversion from array of dimensions {} to a list of vectors of dimension {}",
68 m_dimensions, _v_dimension_);
71 for(
int i = 0; i < m_dimensions.size(); ++i)
74 for(
int k = 0; k < _v_dimension_; ++k)
76 v[k] = m_data[i * _v_dimension_ + k];
80 return cres_success(result);
85 "Invalid conversion from array of dimensions {} to a list of vectors of dimension {}",
86 m_dimensions, _v_dimension_);
91 return m_dimensions == _rhs.m_dimensions and m_data == _rhs.m_data;
93 void fill(
const _T_& _v) { m_data.fill(_v); }
94 typename QVector<_T_>::iterator begin() {
return m_data.begin(); }
95 typename QVector<_T_>::iterator end() {
return m_data.end(); }
96 typename QVector<_T_>::const_iterator begin()
const {
return m_data.begin(); }
97 typename QVector<_T_>::const_iterator end()
const {
return m_data.end(); }
98 QVector<_T_> data()
const {
return m_data; }
100 template<std::convertible_to<
int>... _Args_>
101 _T_& operator()(_Args_... _indices)
103 clog_assert(
sizeof...(_Args_) == m_dimensions.size());
104 return m_data[make_index(0, _indices...)];
107 template<
typename _Arg1_,
typename _Arg2_,
typename... _Args_>
108 int make_index(
int _level, _Arg1_ _i, _Arg2_ j, _Args_... _indices)
110 return make_index(_level + 1, j, _indices...) * m_dimensions[_level] + _i;
112 int make_index(
int,
int _i) {
return _i; }
113 qsizetype totalSize()
const
116 for(
int d : m_dimensions)