From 53ef76b722fe836e1679a9f0cbc3ef7717dce453 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Mon, 15 Jan 2024 15:05:04 +0100 Subject: codec: Adding some convenience access --- modules/codec/c++/data.h | 84 +++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 29 deletions(-) (limited to 'modules/codec/c++/data.h') diff --git a/modules/codec/c++/data.h b/modules/codec/c++/data.h index eb24841..ba8f424 100644 --- a/modules/codec/c++/data.h +++ b/modules/codec/c++/data.h @@ -181,13 +181,13 @@ public: template class data, encode::Native> { private: - std::array dims_; + std::array dims_; std::vector> value_; - std::size_t get_full_size() const { - std::size_t s = 1; + uint64_t get_full_size() const { + uint64_t s = 1; - for(std::size_t iter = 0; iter < Dim; ++iter){ + for(uint64_t iter = 0; iter < Dim; ++iter){ assert(dims_.at(iter) > 0); s *= dims_.at(iter); } @@ -199,7 +199,7 @@ class data, encode::Native> { SAW_DEFAULT_COPY(data); SAW_DEFAULT_MOVE(data); - data(const std::array& i): + data(const std::array& i): dims_{i}, value_{} { @@ -252,12 +252,20 @@ class data, encode::Native> { template data& at(Dims... i){ - return value_.at(this->get_flat_index({static_cast(i)...})); + return value_.at(this->get_flat_index({static_cast(i)...})); } template const data& at(Dims... i) const { - return value_.at(this->get_flat_index({static_cast(i)...})); + return value_.at(this->get_flat_index({static_cast(i)...})); + } + + data& at(const data>& i){ + return value_.at(this->get_flat_index(i)); + } + + const data& at(const data>& i)const{ + return value_.at(this->get_flat_index(i)); } std::size_t get_dim_size(std::size_t i) const { @@ -266,15 +274,23 @@ class data, encode::Native> { size_t size() const { return value_.size();} -private: - std::size_t get_flat_index(const std::array& i) const { - std::size_t s = 0; + data> get_dims() const { + return {dims_}; + } + +private: + uint64_t get_flat_index(const std::array& i) const { + return get_flat_index(data>{i}); + } + + uint64_t get_flat_index(const data>& i) const { + uint64_t s = 0; - std::size_t stride = 1; + uint64_t stride = 1; - for(std::size_t iter = 0; iter < Dim; ++iter){ - assert(i.at(iter) < dims_.at(iter)); - s += i.at(iter) * stride; + for(uint64_t iter = 0; iter < Dim; ++iter){ + assert(i.at(iter).get() < dims_.at(iter)); + s += i.at(iter).get() * stride; stride *= dims_.at(iter); } @@ -282,23 +298,29 @@ private: } }; -template +template class data, encode::Native> { private: //using inner_type = std::array, multiply_helper::value>; //std::unique_ptr value_; - std::vector> value_; + using ArrayT = std::array, ct_multiply::value>; + ArrayT value_; public: - data(){ - value_.resize(ct_multiply::value); + data() = default; + + data(const std::array::type, ct_multiply::value>& data) requires (is_primitive::value) + { + for(uint64_t i = 0; i < ct_multiply::value; ++i){ + value_.at(i).set(data.at(i)); + } } - - data& at(const std::array& ind){ + + data& at(const std::array& ind){ return value_.at(this->get_flat_index(ind)); } - const data& at(const std::array& ind) const { + const data& at(const std::array& ind) const { return value_.at(this->get_flat_index(ind)); } @@ -312,19 +334,23 @@ public: return value_.at(this->get_flat_index({i...})); } - template - std::size_t get_dim_size() const { - return parameter_pack_value::value; + template + uint64_t get_dim_size() const { + return parameter_pack_value::value; + } + + data> get_dims() const { + return {std::array{D...}}; } private: - std::size_t get_flat_index(const std::array& i) const { - std::size_t s = 0; + uint64_t get_flat_index(const std::array& i) const { + uint64_t s = 0; - std::size_t stride = 1; + uint64_t stride = 1; - constexpr static std::array dims_{D...}; + constexpr static std::array dims_{D...}; - for(std::size_t iter = 0; iter < sizeof...(D); ++iter){ + for(uint64_t iter = 0; iter < sizeof...(D); ++iter){ assert(i.at(iter) < dims_.at(iter)); s += i.at(iter) * stride; stride *= dims_.at(iter); -- cgit v1.2.3