diff options
Diffstat (limited to 'modules/codec/c++/data.hpp')
-rw-r--r-- | modules/codec/c++/data.hpp | 32 |
1 files changed, 23 insertions, 9 deletions
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<MetaSchema, encode::Native>){} + constexpr data(data<MetaSchema, encode::Native>){ + } + constexpr data(const std::array<data<T, encode::Native>, ct_multiply<uint64_t,D...>::value>& value__): value_{value__} - {} + { + } + + SAW_DEFAULT_COPY(data); + SAW_DEFAULT_MOVE(data); + template<size_t dim_i = 0> constexpr data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) { - return value_.at(this->get_flat_index({{i}})); + static_assert(sizeof...(D) == 1u); + return value_.at(i.get()); } + template<size_t dim_i = 0> constexpr const data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) const { - return value_.at(this->get_flat_index({{i}})); + static_assert(sizeof...(D) == 1u); + return value_.at(i.get()); } constexpr data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){ @@ -356,8 +366,8 @@ private: constexpr static std::array<uint64_t, sizeof...(D)> 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<schema::UInt64>{iter}).get() < dims_.at(iter)); + s += i.at(data<schema::UInt64>{iter}).get() * stride; stride *= dims_.at(iter); } @@ -628,7 +638,10 @@ class data<schema::Array<T,Dim>, 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<schema::UInt64>{iter}); + + s *= dim_iter.get(); } return s; @@ -649,7 +662,8 @@ class data<schema::Array<T,Dim>, encode::Native> { dims_{init__}, value_{} { - value_.resize(get_full_size()); + uint64_t f_s = get_full_size(); + value_.resize(f_s); } template<size_t i = 0> @@ -693,7 +707,7 @@ class data<schema::Array<T,Dim>, encode::Native> { i_arr.at(0u) = i; return at(i_arr); } - + const data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) const { data<schema::FixedArray<schema::UInt64,Dim>, encode::Native> i_arr; i_arr.at(0u) = i; |