From e5bf2f231e5ebaa13baf0742149d71fc8777e823 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sun, 21 Jul 2024 22:42:22 +0200 Subject: Added preallocation to remote --- modules/remote/c++/transfer_loopback.hpp | 20 +++++++++++++++++--- modules/remote/tests/remote_loopback.cpp | 13 +++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) (limited to 'modules/remote') diff --git a/modules/remote/c++/transfer_loopback.hpp b/modules/remote/c++/transfer_loopback.hpp index 9f6dddd..abea83f 100644 --- a/modules/remote/c++/transfer_loopback.hpp +++ b/modules/remote/c++/transfer_loopback.hpp @@ -36,11 +36,10 @@ public: * */ template - error_or allocate(data::type, Encoding> meta, id store_id){ + error_or allocate(data::MetaSchema, Encoding> meta, id store_id){ auto& vals = std::get>>(values_); - try { - auto insert_res = vals.emplace(std::make_pair(store_id.get_value(), {std::move(meta)})); + auto insert_res = vals.emplace(std::make_pair(store_id.get_value(), data::MetaSchema, Encoding>{std::move(meta)})); if(!insert_res.second){ return make_error(); } @@ -125,6 +124,21 @@ public: ++next_id_; return dat_id; } + + /** + * Preallocate data + */ + template + error_or> allocate(const data::MetaSchema, Encoding>& meta){ + id dat_id{next_id_}; + auto eov = srv_->allocate(meta, dat_id); + if(eov.is_error()){ + auto& err = eov.get_error(); + return std::move(err); + } + ++next_id_; + return dat_id; + } /** * Receive data diff --git a/modules/remote/tests/remote_loopback.cpp b/modules/remote/tests/remote_loopback.cpp index 2895ee7..e78f646 100644 --- a/modules/remote/tests/remote_loopback.cpp +++ b/modules/remote/tests/remote_loopback.cpp @@ -69,5 +69,18 @@ SAW_TEST("Remote Loopback Data"){ auto eov = conv.take(); SAW_EXPECT(!eov.is_value(), "Failed receive. Value should already be erased."); } + + id alloc_id = [&](){ + auto eov = client.allocate(data{}); + SAW_EXPECT(eov.is_value(), "Failed send."); + return eov.get_value(); + }(); + { + auto eov = client.find(alloc_id); + SAW_EXPECT(eov.is_value(), "Failed find."); + auto& f_val = eov.get_value(); + SAW_EXPECT(f_val, "Nullptr in find."); + f_val->set(5u); + } } } -- cgit v1.2.3