From b23d4bf1d3a58b4a8304ca9cf050914e073de958 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sun, 6 Aug 2023 00:25:51 +0200 Subject: c++,codec: Adding fixed array type to native encoding --- c++/codec/data.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'c++/codec/data.h') diff --git a/c++/codec/data.h b/c++/codec/data.h index 8ff06dc..129e704 100644 --- a/c++/codec/data.h +++ b/c++/codec/data.h @@ -243,6 +243,7 @@ private: std::size_t stride = 1; for(std::size_t iter = 0; iter < Dim; ++iter){ + assert(i.at(iter) < dims_.at(iter)); s += i.at(iter) * stride; stride *= dims_.at(iter); } @@ -251,6 +252,57 @@ private: } }; +template +class data, encode::Native> { +private: + std::vector> value_; + +public: + data(){ + data_.resize(ct_multiply::value); + std::fill(data_.begin(), data_.end(), 0ul); + } + + data& at(const std::array& ind){ + return value_.at(this->get_flat_index(ind)); + } + + const data& at(const std::array& ind) const { + return value_.at(this->get_flat_index(ind)); + } + + template + data& at(Dims... i) { + return value_.at(this->get_flat_index({i...})); + } + + template + const data& at(Dims... i) const { + return value_.at(this->get_flat_index({i...})); + } + + template + std::size_t get_dim_size() const { + return parameter_pack_value::value; + } +private: + std::size_t get_flat_index(const std::array& i) const { + std::size_t s = 0; + + std::size_t stride = 1; + + constexpr static std::array dims_{D...}; + + for(std::size_t iter = 0; iter < sizeof...(D); ++iter){ + assert(i.at(iter) < dims_.at(iter)); + s += i.at(iter) * stride; + stride *= dims_.at(iter); + } + + return s; + } +}; + template<> class data { private: -- cgit v1.2.3