55 std::array<size_t, A> m_dimensions;
58 std::array<size_t, A> m_strides;
73 m_ordering {ordering},
77 switch (this->m_ordering) {
79 for (
size_t k = 0; k < A; k++) {
82 for (
size_t l = 0; l < k; l++) {
83 stride *= this->m_dimensions[l];
86 this->m_strides[k] =
stride;
92 for (
size_t k = 0; k < A; k++) {
95 for (
size_t l = k + 1; l < A; l++) {
96 stride *= this->m_dimensions[l];
99 this->m_strides[k] =
stride;
124 size_t offset(
const std::array<size_t, A>& indices)
const {
127 for (
size_t k = 0; k < A; k++) {
129 throw std::invalid_argument(
"DenseVectorizer::offset(const std::array<size_t, A>&): The index is not supported with the memory layout.");
132 value += this->
stride(k) * indices[k];
150 throw std::invalid_argument(
"DenseVectorizer::offset(const std::array<size_t, A>&): The given axis does not exist.");
159 const std::array<size_t, A>&
dimensions()
const {
return this->m_dimensions; }
173 return std::accumulate(this->
dimensions().begin(), this->
dimensions().end(), 1, std::multiplies<size_t>());
184 throw std::invalid_argument(
"DenseVectorizer::offset(const std::array<size_t, A>&): The given axis does not exist.");
194 const std::array<size_t, A>&
strides()
const {
return this->m_strides; }
Definition: DenseVectorizer.hpp:49
size_t numberOfElements() const
Definition: DenseVectorizer.hpp:172
const std::array< size_t, A > & dimensions() const
Definition: DenseVectorizer.hpp:159
size_t offset(const std::array< size_t, A > &indices) const
Definition: DenseVectorizer.hpp:124
size_t dimension(const size_t axis) const
Definition: DenseVectorizer.hpp:148
static constexpr auto NumberOfAxes
Definition: DenseVectorizer.hpp:162
size_t stride(const size_t axis) const
Definition: DenseVectorizer.hpp:182
DenseVectorizer(const std::array< size_t, A > &dimensions, const Ordering ordering=Ordering::ColumnMajor)
Definition: DenseVectorizer.hpp:72
size_t numberOfAxes() const
Definition: DenseVectorizer.hpp:167
DenseVectorizer()
Definition: DenseVectorizer.hpp:109
const std::array< size_t, A > & strides() const
Definition: DenseVectorizer.hpp:194
Definition: BaseOneElectronIntegralBuffer.hpp:25
Ordering
Definition: DenseVectorizer.hpp:34