From 4a85d662012360fecffc9b0e58a582204f631957 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 17 Jun 2025 14:41:12 +0200 Subject: Rewriting parts to avoid infinite recursion in flat index call --- modules/codec/c++/data.hpp | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'modules/codec/c++/data.hpp') diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp index 4b34bfa..61bc9ea 100644 --- a/modules/codec/c++/data.hpp +++ b/modules/codec/c++/data.hpp @@ -318,17 +318,27 @@ private: public: constexpr data() = default; - constexpr data(data){} + constexpr data(data){ + } + constexpr data(const std::array, ct_multiply::value>& value__): value_{value__} - {} + { + } + + SAW_DEFAULT_COPY(data); + SAW_DEFAULT_MOVE(data); + template constexpr data& at(data i) { - return value_.at(this->get_flat_index({{i}})); + static_assert(sizeof...(D) == 1u); + return value_.at(i.get()); } + template constexpr const data& at(data i) const { - return value_.at(this->get_flat_index({{i}})); + static_assert(sizeof...(D) == 1u); + return value_.at(i.get()); } constexpr data& at(const data>& i){ @@ -356,8 +366,8 @@ private: constexpr static std::array dims_{D...}; for(uint64_t iter = 0; iter < sizeof...(D); ++iter){ - assert(i.at({iter}).get() < dims_.at(iter)); - s += i.at({iter}).get() * stride; + assert(i.at(data{iter}).get() < dims_.at(iter)); + s += i.at(data{iter}).get() * stride; stride *= dims_.at(iter); } @@ -628,7 +638,10 @@ class data, encode::Native> { uint64_t s = 1; for(uint64_t iter = 0; iter < Dim; ++iter){ - s *= dims_.at({iter}).get(); + + auto& dim_iter = dims_.at(data{iter}); + + s *= dim_iter.get(); } return s; @@ -649,7 +662,8 @@ class data, encode::Native> { dims_{init__}, value_{} { - value_.resize(get_full_size()); + uint64_t f_s = get_full_size(); + value_.resize(f_s); } template @@ -693,7 +707,7 @@ class data, encode::Native> { i_arr.at(0u) = i; return at(i_arr); } - + const data& at(data i) const { data, encode::Native> i_arr; i_arr.at(0u) = i; -- cgit v1.2.3