From 9b88446ab8ad2579f35a224f81cbd5b506a77ff5 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 3 Feb 2019 07:25:59 -0800 Subject: [PATCH] Tidy up read implementation --- CHANGELOG.md | 6 +++ include/boost/beast/core/detail/impl/read.hpp | 38 ++++++++----------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b141427..49de3ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +Version 210: + +* Tidy up read implementation + +-------------------------------------------------------------------------------- + Version 209: * Faster http::string_to_field diff --git a/include/boost/beast/core/detail/impl/read.hpp b/include/boost/beast/core/detail/impl/read.hpp index 31941f53..555d40d7 100644 --- a/include/boost/beast/core/detail/impl/read.hpp +++ b/include/boost/beast/core/detail/impl/read.hpp @@ -74,25 +74,21 @@ public: std::size_t max_prepare; BOOST_ASIO_CORO_REENTER(*this) { - max_size = cond_(ec, total_, b_); - max_prepare = std::min( - std::max( - 512, b_.capacity() - b_.size()), - std::min( - max_size, b_.max_size() - b_.size())); - while(max_prepare > 0) + for(;;) { - BOOST_ASIO_CORO_YIELD - s_.async_read_some( - b_.prepare(max_prepare), std::move(*this)); - b_.commit(bytes_transferred); - total_ += bytes_transferred; max_size = cond_(ec, total_, b_); max_prepare = std::min( std::max( 512, b_.capacity() - b_.size()), std::min( max_size, b_.max_size() - b_.size())); + if(max_prepare == 0) + break; + BOOST_ASIO_CORO_YIELD + s_.async_read_some( + b_.prepare(max_prepare), std::move(*this)); + b_.commit(bytes_transferred); + total_ += bytes_transferred; } if(! cont) { @@ -359,24 +355,20 @@ read( std::size_t total = 0; std::size_t max_size; std::size_t max_prepare; - max_size = cond(ec, total, buffer); - max_prepare = std::min( - std::max( - 512, buffer.capacity() - buffer.size()), - std::min( - max_size, buffer.max_size() - buffer.size())); - while(max_prepare > 0) + for(;;) { - std::size_t const bytes_transferred = - stream.read_some(buffer.prepare(max_prepare), ec); - buffer.commit(bytes_transferred); - total += bytes_transferred; max_size = cond(ec, total, buffer); max_prepare = std::min( std::max( 512, buffer.capacity() - buffer.size()), std::min( max_size, buffer.max_size() - buffer.size())); + if(max_prepare == 0) + break; + std::size_t const bytes_transferred = + stream.read_some(buffer.prepare(max_prepare), ec); + buffer.commit(bytes_transferred); + total += bytes_transferred; } return total; }