From a4456ca179fe154cfd797225c16d4baf011abaee Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 10 Sep 2024 20:39:21 +0200 Subject: Changing return types on data functions --- modules/codec/c++/base64.hpp | 8 +- modules/codec/c++/csv.hpp | 6 +- modules/codec/c++/data.hpp | 194 +++++++++++++++++++------------------- modules/codec/c++/schema_meta.hpp | 6 +- modules/codec/c++/simple.hpp | 12 +-- 5 files changed, 111 insertions(+), 115 deletions(-) (limited to 'modules/codec/c++') diff --git a/modules/codec/c++/base64.hpp b/modules/codec/c++/base64.hpp index 141a63d..ce9d4ce 100644 --- a/modules/codec/c++/base64.hpp +++ b/modules/codec/c++/base64.hpp @@ -71,8 +71,8 @@ public: std::string b64_str; try { - uint64_t unpadded_len = (from.size() * 4u + 2u) / 3u; - uint64_t padded_len = ( unpadded_len + 3u ) & ~3u; + uint64_t unpadded_len = (from.size() * 4u + 2u).get() / 3u; + uint64_t padded_len = (unpadded_len + 3u) & ~3u; b64_str.resize(padded_len); }catch(const std::exception&){ return make_error(); @@ -81,8 +81,8 @@ public: uint64_t j{0u}, k{0u}; std::array s{}; - for(uint64_t i = 0u; i < from.size(); ++i){ - s[j] = from.at(i); + for(data i = 0u; i < from.size(); ++i){ + s[j] = from.at(i.get()); ++j; if(j==3){ b64_str.at(k) = impl::base64_char_map.at((s[0u] & 0xFC) >> 2); diff --git a/modules/codec/c++/csv.hpp b/modules/codec/c++/csv.hpp index 240ed75..0d76372 100644 --- a/modules/codec/c++/csv.hpp +++ b/modules/codec/c++/csv.hpp @@ -50,7 +50,7 @@ struct csv_encode, FromDecode> { } } - for(std::size_t i = 0; i < from.size(); ++i){ + for(data i = 0; i < from.size(); ++i){ auto eov = csv_encode::encode(from.at(i), to); if(eov.is_error()){ return eov; @@ -166,8 +166,8 @@ struct csv_encode { using Schema = schema::String; static error_or encode(const data& from, buffer& to){ - for(size_t i = 0; i < from.size(); ++i){ - auto eov = stream_value::encode(from.at(i), to); + for(data i = 0; i < from.size(); ++i){ + auto eov = stream_value::encode(from.at(i.get()), to); if(eov.is_error()){ return eov; } diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp index 75c611c..01eddb6 100644 --- a/modules/codec/c++/data.hpp +++ b/modules/codec/c++/data.hpp @@ -167,6 +167,11 @@ public: return {get() - rhs.get()}; } + data& operator++() { + set(get() + static_cast::type>(1)); + return *this; + } + template bool operator==(const data& rhs)const{ return get() == rhs.get(); @@ -271,6 +276,74 @@ public: } }; +template +class data, encode::Native> { +public: + using Schema = schema::FixedArray; + using MetaSchema = typename meta_schema::MetaSchema; +private: + //using inner_type = std::array, multiply_helper::value>; + //std::unique_ptr value_; + using ArrayT = std::array, ct_multiply::value>; + ArrayT value_; + +public: + data() = default; + data(data){} + data(const std::array, ct_multiply::value>& value__): + value_{value__} + {} + + 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)); + } + + data& at(data i) { + return value_.at(this->get_flat_index({i.get()})); + } + + const data& at(data i) const { + return value_.at(this->get_flat_index({i.get()})); + } + + 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)); + } + + template + uint64_t get_dim_size() const { + return parameter_pack_value::value; + } + + data> get_dims() const { + return {std::array{D...}}; + } +private: + uint64_t get_flat_index(const std::array& i) const { + uint64_t s = 0; + + uint64_t stride = 1; + + constexpr static std::array dims_{D...}; + + 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); + } + + return s; + } +}; + /* template class data>, encode::Native { @@ -427,7 +500,7 @@ public: /** * Return the amount of members. */ - constexpr size_t size() const { + constexpr uint64_t size() const { return sizeof...(T); } }; @@ -474,7 +547,7 @@ public: return std::get(value_); } - constexpr size_t size() const { + constexpr uint64_t size() const { return sizeof...(T); } }; @@ -609,15 +682,17 @@ class data, encode::Native> { 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(std::array{static_cast(i)...})); - } - template - const data& at(Dims... i) const { - return value_.at(this->get_flat_index(std::array{static_cast(i)...})); + data& at(data i) { + data, encode::Native> i_arr; + 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; + return at(i_arr); } data& at(const data>& i){ @@ -632,7 +707,7 @@ class data, encode::Native> { return dims_.at(i); } - size_t size() const { return value_.size();} + data size() const { return {value_.size()};} data> get_dims() const { return {dims_}; @@ -662,7 +737,7 @@ private: static_assert(always_false, "Cases exhausted"); } }(i.at(iter)); - assert(ind < dims_.at(iter)); + assert(ind < dims_.at({iter})); s += ind * stride; stride *= dims_.at(iter); } @@ -671,85 +746,6 @@ private: } }; -template -class data, encode::Native> { -public: - using Schema = schema::FixedArray; - using MetaSchema = typename meta_schema::MetaSchema; -private: - //using inner_type = std::array, multiply_helper::value>; - //std::unique_ptr value_; - using ArrayT = std::array, ct_multiply::value>; - ArrayT value_; - -public: - data() = default; - data(data){} - data(const std::array, ct_multiply::value>& value__): - value_{value__} - {} - - 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(data... i) { - return value_.at(this->get_flat_index({i...})); - } - - template - const data& at(data... i) const { - return value_.at(this->get_flat_index({i...})); - } - - 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...})); - } - - 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)); - } - - template - uint64_t get_dim_size() const { - return parameter_pack_value::value; - } - - data> get_dims() const { - return {std::array{D...}}; - } -private: - uint64_t get_flat_index(const std::array& i) const { - uint64_t s = 0; - - uint64_t stride = 1; - - constexpr static std::array dims_{D...}; - - 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); - } - - return s; - } -}; /** * Data type representing string. @@ -781,8 +777,8 @@ public: /** * Return the length of the string. */ - std::size_t size() const { - return value_.size(); + data size() const { + return {value_.size()}; } /** @@ -795,22 +791,22 @@ public: /** * Get a char reference at position i. */ - char& at(size_t i) { + char& at(uint64_t i) { return value_.at(i); } /** * Get a char reference at position i. */ - const char& at(size_t i) const { + const char& at(uint64_t i) const { return value_.at(i); } - char get_at(size_t i) const{ + char get_at(uint64_t i) const{ return value_.at(i); } - void set_at(size_t i, char val){ + void set_at(uint64_t i, char val){ value_.at(i) = val; } @@ -828,8 +824,8 @@ public: return false; } bool eq = true; - for(uint64_t i = 0; i < size(); ++i){ - eq = eq && (get_at(i) == rhs.get_at(i)); + for(data i = 0; i < size(); ++i){ + eq = eq && (get_at(i.get()) == rhs.get_at(i.get())); } return eq; } diff --git a/modules/codec/c++/schema_meta.hpp b/modules/codec/c++/schema_meta.hpp index 80b6686..659250c 100644 --- a/modules/codec/c++/schema_meta.hpp +++ b/modules/codec/c++/schema_meta.hpp @@ -78,9 +78,9 @@ struct meta_schema> { using Schema = schema::Array; }; -template -struct meta_schema> { +template +struct meta_schema> { using MetaSchema = schema::Void; - using Schema = schema::FixedArray; + using Schema = schema::FixedArray; }; } diff --git a/modules/codec/c++/simple.hpp b/modules/codec/c++/simple.hpp index 33831b6..4990578 100644 --- a/modules/codec/c++/simple.hpp +++ b/modules/codec/c++/simple.hpp @@ -169,7 +169,7 @@ template struct kelsimple_encode { static error_or encode(const data& from, buffer& to){ const auto str_size = from.size(); - typename native_data_type::type str_len = static_cast(str_size); + typename native_data_type::type str_len = static_cast(str_size.get()); { auto eov = stream_value::encode(str_len, to); if(eov.is_error()){ @@ -177,8 +177,8 @@ struct kelsimple_encode { } } - for(std::size_t i = 0; i < str_size; ++i){ - auto eov = stream_value::encode(from.at(i), to); + for(data i = 0; i < str_size; ++i){ + auto eov = stream_value::encode(from.at(i.get()), to); if(eov.is_error()){ return eov; } @@ -344,14 +344,14 @@ struct kelsimple_decode { } to = data{val}; } - const std::size_t str_size = to.size(); - for(std::size_t i = 0; i < str_size; ++i){ + const data str_size = to.size(); + for(data i = 0; i < str_size; ++i){ int8_t val{}; auto eov = stream_value::decode(val, from); if(eov.is_error()){ return eov; } - to.set_at(i, val); + to.set_at(i.get(), val); } return void_t{}; } -- cgit v1.2.3