From 35cfdae3f313b8e2074c58f53b5961a9fe7bd6d6 Mon Sep 17 00:00:00 2001 From: Marcelo Zimbres Date: Sun, 2 Feb 2025 23:31:43 +0100 Subject: [PATCH] Unifies the signatures of async functions. --- README.md | 14 +++++++------- include/boost/redis/connection.hpp | 25 +++++++++++++------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 523fec4e..3140f639 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ auto co_main(config const& cfg) -> net::awaitable response resp; // Executes the request. - co_await conn->async_exec(req, resp, net::deferred); + co_await conn->async_exec(req, resp); conn->cancel(); std::cout << "PING: " << std::get<0>(resp).value() << std::endl; @@ -98,7 +98,7 @@ receiver(std::shared_ptr conn) -> net::awaitable while (conn->will_reconnect()) { // Reconnect to channels. - co_await conn->async_exec(req, ignore, net::deferred); + co_await conn->async_exec(req, ignore); // Loop reading Redis pushes. for (;;) { @@ -246,14 +246,14 @@ response< Where both are passed to `async_exec` as showed elsewhere ```cpp -co_await conn->async_exec(req, resp, net::deferred); +co_await conn->async_exec(req, resp); ``` If the intention is to ignore responses altogether use `ignore` ```cpp // Ignores the response -co_await conn->async_exec(req, ignore, net::deferred); +co_await conn->async_exec(req, ignore); ``` Responses that contain nested aggregates or heterogeneous data @@ -296,7 +296,7 @@ response< ... > resp; -co_await conn->async_exec(req, resp, net::deferred); +co_await conn->async_exec(req, resp); ``` Everything else stays pretty much the same. @@ -336,7 +336,7 @@ response< exec_resp_type, // exec > resp; -co_await conn->async_exec(req, resp, net::deferred); +co_await conn->async_exec(req, resp); ``` For a complete example see cpp20_containers.cpp. @@ -384,7 +384,7 @@ using other types ```cpp // Receives any RESP3 simple or aggregate data type. boost::redis::generic_response resp; -co_await conn->async_exec(req, resp, net::deferred); +co_await conn->async_exec(req, resp); ``` For example, suppose we want to retrieve a hash data structure diff --git a/include/boost/redis/connection.hpp b/include/boost/redis/connection.hpp index 00349140..203ce390 100644 --- a/include/boost/redis/connection.hpp +++ b/include/boost/redis/connection.hpp @@ -574,7 +574,7 @@ public: async_run( config const& cfg = {}, Logger l = Logger{}, - CompletionToken token = CompletionToken{}) + CompletionToken&& token = {}) { cfg_ = cfg; resv_.set_config(cfg); @@ -612,8 +612,8 @@ public: * bytes. */ template > - auto async_receive(CompletionToken token = CompletionToken{}) - { return receive_channel_.async_receive(std::move(token)); } + auto async_receive(CompletionToken&& token = {}) + { return receive_channel_.async_receive(std::forward(token)); } /** @brief Receives server pushes synchronously without blocking. * @@ -677,7 +677,7 @@ public: async_exec( request const& req, Response& resp = ignore, - CompletionToken&& token = CompletionToken{}) + CompletionToken&& token = {}) { return this->async_exec(req, any_adapter(resp), std::forward(token)); } @@ -692,7 +692,7 @@ public: async_exec( request const& req, any_adapter adapter, - CompletionToken&& token = CompletionToken{}) + CompletionToken&& token = {}) { auto& adapter_impl = adapter.impl_; BOOST_ASSERT_MSG(req.get_expected_responses() <= adapter_impl.supported_response_size, "Request and response have incompatible sizes."); @@ -937,9 +937,9 @@ private: { return !notifier_.is_open();} template - auto async_wait(CompletionToken token) + auto async_wait(CompletionToken&& token) { - return notifier_.async_receive(std::move(token)); + return notifier_.async_receive(std::forward(token)); } //private: @@ -1013,7 +1013,8 @@ private: return asio::async_compose < CompletionToken , void(system::error_code) - >(detail::reader_op{this, l}, token, writer_timer_); + >(detail::reader_op{this, l}, + std::forward(token), writer_timer_); } template @@ -1022,7 +1023,7 @@ private: return asio::async_compose < CompletionToken , void(system::error_code) - >(detail::writer_op{this, l}, token, writer_timer_); + >(detail::writer_op{this, l}, std::forward(token), writer_timer_); } [[nodiscard]] bool coalesce_requests() @@ -1252,7 +1253,7 @@ public: /// Calls `boost::redis::basic_connection::async_run`. template - auto async_run(config const& cfg, logger l, CompletionToken token = {}) + auto async_run(config const& cfg, logger l, CompletionToken&& token = {}) { return asio::async_initiate< CompletionToken, void(boost::system::error_code)>( @@ -1264,8 +1265,8 @@ public: /// Calls `boost::redis::basic_connection::async_receive`. template - auto async_receive(CompletionToken token = {}) - { return impl_.async_receive(std::move(token)); } + auto async_receive(CompletionToken&& token = {}) + { return impl_.async_receive(std::forward(token)); } /// Calls `boost::redis::basic_connection::receive`. std::size_t receive(system::error_code& ec)