Tidy up read implementation

This commit is contained in:
Vinnie Falco
2019-02-03 07:25:59 -08:00
parent 18a5f43639
commit 9b88446ab8
2 changed files with 21 additions and 23 deletions

View File

@@ -1,3 +1,9 @@
Version 210:
* Tidy up read implementation
--------------------------------------------------------------------------------
Version 209: Version 209:
* Faster http::string_to_field * Faster http::string_to_field

View File

@@ -74,25 +74,21 @@ public:
std::size_t max_prepare; std::size_t max_prepare;
BOOST_ASIO_CORO_REENTER(*this) BOOST_ASIO_CORO_REENTER(*this)
{ {
max_size = cond_(ec, total_, b_); for(;;)
max_prepare = std::min<std::size_t>(
std::max<std::size_t>(
512, b_.capacity() - b_.size()),
std::min<std::size_t>(
max_size, b_.max_size() - b_.size()));
while(max_prepare > 0)
{ {
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_size = cond_(ec, total_, b_);
max_prepare = std::min<std::size_t>( max_prepare = std::min<std::size_t>(
std::max<std::size_t>( std::max<std::size_t>(
512, b_.capacity() - b_.size()), 512, b_.capacity() - b_.size()),
std::min<std::size_t>( std::min<std::size_t>(
max_size, b_.max_size() - b_.size())); 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) if(! cont)
{ {
@@ -359,24 +355,20 @@ read(
std::size_t total = 0; std::size_t total = 0;
std::size_t max_size; std::size_t max_size;
std::size_t max_prepare; std::size_t max_prepare;
max_size = cond(ec, total, buffer); for(;;)
max_prepare = std::min<std::size_t>(
std::max<std::size_t>(
512, buffer.capacity() - buffer.size()),
std::min<std::size_t>(
max_size, buffer.max_size() - buffer.size()));
while(max_prepare > 0)
{ {
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_size = cond(ec, total, buffer);
max_prepare = std::min<std::size_t>( max_prepare = std::min<std::size_t>(
std::max<std::size_t>( std::max<std::size_t>(
512, buffer.capacity() - buffer.size()), 512, buffer.capacity() - buffer.size()),
std::min<std::size_t>( std::min<std::size_t>(
max_size, buffer.max_size() - buffer.size())); 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; return total;
} }