From 3ad1f9e4147cf64627793d4003b50039d86ce995 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Thu, 25 Jul 2024 14:56:53 +0200 Subject: wip --- modules/codec/c++/data.hpp | 1 - modules/codec/c++/forst.tmpl.hpp | 86 +++++++++++++++++++++++++++++++++++++++- modules/codec/c++/transport.hpp | 3 ++ 3 files changed, 87 insertions(+), 3 deletions(-) (limited to 'modules/codec/c++') diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp index d8208d0..a17f123 100644 --- a/modules/codec/c++/data.hpp +++ b/modules/codec/c++/data.hpp @@ -502,7 +502,6 @@ class data, encode::Native, storage::Default> { value_.resize(get_full_size()); } - template error_or add(saw::data data){ /** @todo diff --git a/modules/codec/c++/forst.tmpl.hpp b/modules/codec/c++/forst.tmpl.hpp index a52f0b9..52a4273 100644 --- a/modules/codec/c++/forst.tmpl.hpp +++ b/modules/codec/c++/forst.tmpl.hpp @@ -2,7 +2,7 @@ namespace saw { namespace impl { /** - * This class provides + * This class provides basic info on sizes of the encode::Forst */ template struct forst_codec_info { @@ -11,21 +11,42 @@ struct forst_codec_info { template struct forst_codec_info> { -private: public: static constexpr uint64_t layers = 0u; + + static constexpr uint64_t static_size = N; + + template + static uint64_t dynamic_size(const data, Encoding>&) noexcept { + return 0u; + } }; template<> struct forst_codec_info { public: static constexpr uint64_t layers = 1u; + + static constexpr uint64_t static_size = 8u; + + template + static uint64_t dynamic_size (const data& dat) noexcept { + return dat.size() * 1u; + } }; template struct forst_codec_info> { public: static constexpr uint64_t layers = 1u + forst_codec_info::layers; + + /// Dimension and the relative pointer + static constexpr uint64_t static_size = 8u * N + 8u; + + template + static uint64_t dynamic_size (const data& dat) { + return dat.size() * forst_codec_info::static_size; + } }; template @@ -46,8 +67,40 @@ public: } return 0u; } + public: static constexpr uint64_t layers = max_layers<0u>(); + +public: + template + static constexpr uint64_t static_size_calc(){ + if constexpr ( i < sizeof...(Members) ) { + using MT = typename parameter_pack_type::type; + + constexpr uint64_t layer_i = forst_codec_info::static_size + static_size_calc(); + return layer_i; + } + return 0u; + } + +public: + static constexpr uint64_t static_size = static_size_calc<0>(); + + template + static uint64_t dynamic_size_calc(const data, Encoding>& dat) noexcept { + if constexpr ( i < sizeof...(Members) ){ + using MT = typename parameter_pack_type::type; + + constexpr uint64_t layer_i = forst_codec_info::dynamic_size(dat) + dynamic_size_calc(dat); + return layer_i; + } + return 0u; + } +public: + template + static uint64_t dynamic_size(const data, Encoding>& dat) noexcept { + return dynamic_size_calc<0u>(dat); + } }; template @@ -70,6 +123,35 @@ public: } public: static constexpr uint64_t layers = max_layers<0u>(); +public: + template + static constexpr uint64_t static_size_calc(){ + if constexpr ( i < sizeof...(T) ) { + using MT = typename parameter_pack_type::type; + + constexpr uint64_t layer_i = forst_codec_info::static_size + layer_size_calc(); + } + return 0u; + } + +public: + static constexpr uint64_t static_size = static_size_calc<0>(); + + template + static uint64_t dynamic_size_calc(const data, Encoding>& dat) noexcept { + if constexpr ( i < sizeof...(T) ){ + using MT = typename parameter_pack_type::type; + + constexpr uint64_t layer_i = forst_codec_info::dynamic_size(dat) + dynamic_size_calc(dat); + return layer_i; + } + return 0u; + } +public: + template + static uint64_t dynamic_size(const data, Encoding>& dat) noexcept { + return dynamic_size_calc<0u>(dat); + } }; } } diff --git a/modules/codec/c++/transport.hpp b/modules/codec/c++/transport.hpp index 430f719..110ab3d 100644 --- a/modules/codec/c++/transport.hpp +++ b/modules/codec/c++/transport.hpp @@ -21,6 +21,9 @@ private: public: error_or view_slice(buffer& buff) const { (void) buff; + + buffer_view view{buff}; + return make_error(); } -- cgit v1.2.3