summaryrefslogtreecommitdiff
path: root/boost/beast/core/impl/buffers_adapter.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/impl/buffers_adapter.ipp')
-rw-r--r--boost/beast/core/impl/buffers_adapter.ipp58
1 files changed, 38 insertions, 20 deletions
diff --git a/boost/beast/core/impl/buffers_adapter.ipp b/boost/beast/core/impl/buffers_adapter.ipp
index e16d2a9b32..fa0872ae77 100644
--- a/boost/beast/core/impl/buffers_adapter.ipp
+++ b/boost/beast/core/impl/buffers_adapter.ipp
@@ -17,6 +17,7 @@
#include <cstring>
#include <iterator>
#include <stdexcept>
+#include <utility>
namespace boost {
namespace beast {
@@ -28,7 +29,7 @@ class buffers_adapter<MutableBufferSequence>::
buffers_adapter const* ba_;
public:
- using value_type = boost::asio::mutable_buffer;
+ using value_type = boost::asio::const_buffer;
class const_iterator;
@@ -144,7 +145,8 @@ private:
template<class MutableBufferSequence>
inline
auto
-buffers_adapter<MutableBufferSequence>::const_buffers_type::begin() const ->
+buffers_adapter<MutableBufferSequence>::
+const_buffers_type::begin() const ->
const_iterator
{
return const_iterator{*ba_, ba_->begin_};
@@ -153,7 +155,8 @@ buffers_adapter<MutableBufferSequence>::const_buffers_type::begin() const ->
template<class MutableBufferSequence>
inline
auto
-buffers_adapter<MutableBufferSequence>::const_buffers_type::end() const ->
+buffers_adapter<MutableBufferSequence>::
+const_buffers_type::end() const ->
const_iterator
{
return const_iterator{*ba_, ba_->out_ ==
@@ -308,8 +311,8 @@ end() const ->
//------------------------------------------------------------------------------
template<class MutableBufferSequence>
-buffers_adapter<MutableBufferSequence>::buffers_adapter(
- buffers_adapter&& other)
+buffers_adapter<MutableBufferSequence>::
+buffers_adapter(buffers_adapter&& other)
: buffers_adapter(std::move(other),
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.begin_),
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.out_),
@@ -318,8 +321,8 @@ buffers_adapter<MutableBufferSequence>::buffers_adapter(
}
template<class MutableBufferSequence>
-buffers_adapter<MutableBufferSequence>::buffers_adapter(
- buffers_adapter const& other)
+buffers_adapter<MutableBufferSequence>::
+buffers_adapter(buffers_adapter const& other)
: buffers_adapter(other,
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.begin_),
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.out_),
@@ -329,8 +332,9 @@ buffers_adapter<MutableBufferSequence>::buffers_adapter(
template<class MutableBufferSequence>
auto
-buffers_adapter<MutableBufferSequence>::operator=(
- buffers_adapter&& other) -> buffers_adapter&
+buffers_adapter<MutableBufferSequence>::
+operator=(buffers_adapter&& other) ->
+ buffers_adapter&
{
auto const nbegin = std::distance<iter_type>(
boost::asio::buffer_sequence_begin(other.bs_),
@@ -355,8 +359,9 @@ buffers_adapter<MutableBufferSequence>::operator=(
template<class MutableBufferSequence>
auto
-buffers_adapter<MutableBufferSequence>::operator=(
- buffers_adapter const& other) -> buffers_adapter&
+buffers_adapter<MutableBufferSequence>::
+operator=(buffers_adapter const& other) ->
+ buffers_adapter&
{
auto const nbegin = std::distance<iter_type>(
boost::asio::buffer_sequence_begin(other.bs_),
@@ -380,8 +385,8 @@ buffers_adapter<MutableBufferSequence>::operator=(
}
template<class MutableBufferSequence>
-buffers_adapter<MutableBufferSequence>::buffers_adapter(
- MutableBufferSequence const& bs)
+buffers_adapter<MutableBufferSequence>::
+buffers_adapter(MutableBufferSequence const& bs)
: bs_(bs)
, begin_(boost::asio::buffer_sequence_begin(bs_))
, out_ (boost::asio::buffer_sequence_begin(bs_))
@@ -391,8 +396,21 @@ buffers_adapter<MutableBufferSequence>::buffers_adapter(
}
template<class MutableBufferSequence>
+template<class... Args>
+buffers_adapter<MutableBufferSequence>::
+buffers_adapter(boost::in_place_init_t, Args&&... args)
+ : bs_{std::forward<Args>(args)...}
+ , begin_(boost::asio::buffer_sequence_begin(bs_))
+ , out_ (boost::asio::buffer_sequence_begin(bs_))
+ , end_ (boost::asio::buffer_sequence_begin(bs_))
+ , max_size_(boost::asio::buffer_size(bs_))
+{
+}
+
+template<class MutableBufferSequence>
auto
-buffers_adapter<MutableBufferSequence>::prepare(std::size_t n) ->
+buffers_adapter<MutableBufferSequence>::
+prepare(std::size_t n) ->
mutable_buffers_type
{
using boost::asio::buffer_size;
@@ -433,7 +451,8 @@ buffers_adapter<MutableBufferSequence>::prepare(std::size_t n) ->
template<class MutableBufferSequence>
void
-buffers_adapter<MutableBufferSequence>::commit(std::size_t n)
+buffers_adapter<MutableBufferSequence>::
+commit(std::size_t n)
{
using boost::asio::buffer_size;
if(out_ == end_)
@@ -447,20 +466,17 @@ buffers_adapter<MutableBufferSequence>::commit(std::size_t n)
{
out_pos_ += n;
in_size_ += n;
- max_size_ -= n;
return;
}
++out_;
n -= avail;
out_pos_ = 0;
in_size_ += avail;
- max_size_ -= avail;
}
n = (std::min)(n, out_end_ - out_pos_);
out_pos_ += n;
in_size_ += n;
- max_size_ -= n;
if(out_pos_ == buffer_size(*out_))
{
++out_;
@@ -472,7 +488,8 @@ buffers_adapter<MutableBufferSequence>::commit(std::size_t n)
template<class MutableBufferSequence>
inline
auto
-buffers_adapter<MutableBufferSequence>::data() const ->
+buffers_adapter<MutableBufferSequence>::
+data() const ->
const_buffers_type
{
return const_buffers_type{*this};
@@ -480,7 +497,8 @@ buffers_adapter<MutableBufferSequence>::data() const ->
template<class MutableBufferSequence>
void
-buffers_adapter<MutableBufferSequence>::consume(std::size_t n)
+buffers_adapter<MutableBufferSequence>::
+consume(std::size_t n)
{
using boost::asio::buffer_size;
while(begin_ != out_)