From 3fd0aed1c6efa031c1b457fd953a5128c66ad2f1 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Tue, 3 Sep 2024 17:41:37 +0200 Subject: Reworking tmpl_group data_servers --- modules/remote/c++/transfer_loopback.hpp | 53 ++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 16 deletions(-) (limited to 'modules') diff --git a/modules/remote/c++/transfer_loopback.hpp b/modules/remote/c++/transfer_loopback.hpp index bc23498..1a06287 100644 --- a/modules/remote/c++/transfer_loopback.hpp +++ b/modules/remote/c++/transfer_loopback.hpp @@ -45,7 +45,7 @@ public: error_or send(const data& dat, id store_id){ try { - auto insert_res = values_.emplace(std::make_pair(store_id.get_value(), std::move(dat))); + auto insert_res = values_.emplace(std::make_pair(store_id.get_value(), dat)); if(!insert_res.second){ return make_error(); } @@ -100,20 +100,48 @@ public: }; template -class data_server, Encoding, rmt::Loopback> final : public i_data_server { +class data_server, Encoding, rmt::Loopback> final { private: - typename impl::data_server_redux>::type>::type values_; - ptr> remote_; remote_address rmt_address_; + std::tuple...> values_; + + struct inner_register_helper { + template + static error_or reg_i(ptr> rmt, ref> addr, ref...>> vals){ + + { + auto eov = rmt().register_data_server(addr,std::get(vals)); + if(eov.is_error()){ + return i; + } + } + + if constexpr ( (i+1u) < sizeof...(Schema) ){ + return reg_i(rmt, addr, vals); + } + // This only happens if we reached the last element + return i+1u; + } + + static error_or reg(ptr> rmt, ref> addr, + ref...>> vals){ + if ( 0u < sizeof...(Schema) ){ + return reg_i<0u>(rmt,addr,vals); + } + return 1u; + } + + static error_or dereg(ptr> rmt, ref> addr, ref...>> vals){ + return 1u; + } + }; public: - static constexpr std::pair class_id{schema_hash>::apply(), schema_hash::apply()}; - - data_server(ptr> remote__, const remote_address& addr): + data_server(ptr> remote__, const remote_address& addr, std::tuple...>&& values__): remote_{remote__}, - rmt_address_{addr} + rmt_address_{addr}, + values_{std::move(values__)} { - remote_().register_data_server(addr,*this); } ~data_server(){ @@ -123,13 +151,6 @@ public: SAW_FORBID_COPY(data_server); SAW_FORBID_MOVE(data_server); - /** - * Return the schema id - */ - std::pair get_class_id() const override { - return class_id; - } - /** * Get data from client */ -- cgit v1.2.3