mirror of
https://github.com/boostorg/beast.git
synced 2025-08-01 05:44:38 +02:00
@@ -5,6 +5,7 @@ Version 91:
|
|||||||
* source.dox is path-independent
|
* source.dox is path-independent
|
||||||
* Tidy up namespace qualifiers
|
* Tidy up namespace qualifiers
|
||||||
* Tidy up MSVC CMakeLists.txt
|
* Tidy up MSVC CMakeLists.txt
|
||||||
|
* Optimize buffered_read_stream
|
||||||
|
|
||||||
WebSocket:
|
WebSocket:
|
||||||
|
|
||||||
|
@@ -97,7 +97,7 @@ class buffered_read_stream
|
|||||||
template<class Buffers, class Handler>
|
template<class Buffers, class Handler>
|
||||||
class read_some_op;
|
class read_some_op;
|
||||||
|
|
||||||
DynamicBuffer sb_;
|
DynamicBuffer buffer_;
|
||||||
std::size_t capacity_ = 0;
|
std::size_t capacity_ = 0;
|
||||||
Stream next_layer_;
|
Stream next_layer_;
|
||||||
|
|
||||||
@@ -180,14 +180,14 @@ public:
|
|||||||
DynamicBuffer&
|
DynamicBuffer&
|
||||||
buffer()
|
buffer()
|
||||||
{
|
{
|
||||||
return sb_;
|
return buffer_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Access the internal buffer
|
/// Access the internal buffer
|
||||||
DynamicBuffer const&
|
DynamicBuffer const&
|
||||||
buffer() const
|
buffer() const
|
||||||
{
|
{
|
||||||
return sb_;
|
return buffer_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the maximum buffer size.
|
/** Set the maximum buffer size.
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include <boost/beast/core/bind_handler.hpp>
|
#include <boost/beast/core/bind_handler.hpp>
|
||||||
#include <boost/beast/core/error.hpp>
|
#include <boost/beast/core/error.hpp>
|
||||||
#include <boost/beast/core/handler_ptr.hpp>
|
#include <boost/beast/core/handler_ptr.hpp>
|
||||||
|
#include <boost/beast/core/read_size.hpp>
|
||||||
#include <boost/beast/core/type_traits.hpp>
|
#include <boost/beast/core/type_traits.hpp>
|
||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/asio/handler_alloc_hook.hpp>
|
#include <boost/asio/handler_alloc_hook.hpp>
|
||||||
@@ -96,7 +97,7 @@ read_some_op<MutableBufferSequence, Handler>::operator()(
|
|||||||
switch(step_)
|
switch(step_)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if(s_.sb_.size() == 0)
|
if(s_.buffer_.size() == 0)
|
||||||
{
|
{
|
||||||
if(s_.capacity_ == 0)
|
if(s_.capacity_ == 0)
|
||||||
{
|
{
|
||||||
@@ -109,8 +110,9 @@ read_some_op<MutableBufferSequence, Handler>::operator()(
|
|||||||
// read
|
// read
|
||||||
step_ = 2;
|
step_ = 2;
|
||||||
return s_.next_layer_.async_read_some(
|
return s_.next_layer_.async_read_some(
|
||||||
s_.sb_.prepare(s_.capacity_),
|
s_.buffer_.prepare(read_size(
|
||||||
std::move(*this));
|
s_.buffer_, s_.capacity_)),
|
||||||
|
std::move(*this));
|
||||||
|
|
||||||
}
|
}
|
||||||
step_ = 3;
|
step_ = 3;
|
||||||
@@ -123,13 +125,13 @@ read_some_op<MutableBufferSequence, Handler>::operator()(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
s_.sb_.commit(bytes_transferred);
|
s_.buffer_.commit(bytes_transferred);
|
||||||
BOOST_BEAST_FALLTHROUGH;
|
BOOST_BEAST_FALLTHROUGH;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
bytes_transferred =
|
bytes_transferred =
|
||||||
boost::asio::buffer_copy(b_, s_.sb_.data());
|
boost::asio::buffer_copy(b_, s_.buffer_.data());
|
||||||
s_.sb_.consume(bytes_transferred);
|
s_.buffer_.consume(bytes_transferred);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
h_(ec, bytes_transferred);
|
h_(ec, bytes_transferred);
|
||||||
@@ -198,12 +200,13 @@ read_some(MutableBufferSequence const& buffers,
|
|||||||
"MutableBufferSequence requirements not met");
|
"MutableBufferSequence requirements not met");
|
||||||
using boost::asio::buffer_size;
|
using boost::asio::buffer_size;
|
||||||
using boost::asio::buffer_copy;
|
using boost::asio::buffer_copy;
|
||||||
if(sb_.size() == 0)
|
if(buffer_.size() == 0)
|
||||||
{
|
{
|
||||||
if(capacity_ == 0)
|
if(capacity_ == 0)
|
||||||
return next_layer_.read_some(buffers, ec);
|
return next_layer_.read_some(buffers, ec);
|
||||||
sb_.commit(next_layer_.read_some(
|
buffer_.commit(next_layer_.read_some(
|
||||||
sb_.prepare(capacity_), ec));
|
buffer_.prepare(read_size(buffer_,
|
||||||
|
capacity_)), ec));
|
||||||
if(ec)
|
if(ec)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -212,8 +215,8 @@ read_some(MutableBufferSequence const& buffers,
|
|||||||
ec.assign(0, ec.category());
|
ec.assign(0, ec.category());
|
||||||
}
|
}
|
||||||
auto bytes_transferred =
|
auto bytes_transferred =
|
||||||
buffer_copy(buffers, sb_.data());
|
buffer_copy(buffers, buffer_.data());
|
||||||
sb_.consume(bytes_transferred);
|
buffer_.consume(bytes_transferred);
|
||||||
return bytes_transferred;
|
return bytes_transferred;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,6 +233,9 @@ async_read_some(MutableBufferSequence const& buffers,
|
|||||||
static_assert(is_mutable_buffer_sequence<
|
static_assert(is_mutable_buffer_sequence<
|
||||||
MutableBufferSequence>::value,
|
MutableBufferSequence>::value,
|
||||||
"MutableBufferSequence requirements not met");
|
"MutableBufferSequence requirements not met");
|
||||||
|
if(buffer_.size() == 0 && capacity_ == 0)
|
||||||
|
return next_layer_.async_read_some(buffers,
|
||||||
|
std::forward<ReadHandler>(handler));
|
||||||
async_completion<ReadHandler,
|
async_completion<ReadHandler,
|
||||||
void(error_code, std::size_t)> init{handler};
|
void(error_code, std::size_t)> init{handler};
|
||||||
read_some_op<MutableBufferSequence, handler_type<
|
read_some_op<MutableBufferSequence, handler_type<
|
||||||
|
Reference in New Issue
Block a user