mirror of
https://github.com/boostorg/beast.git
synced 2025-07-31 21:34:46 +02:00
buffers_adapter improvements:
* Add value() * Add value_type * Add in-place constructor
This commit is contained in:
@@ -4,6 +4,7 @@ Version 173:
|
|||||||
* Fix buffers_adapter iterator value type
|
* Fix buffers_adapter iterator value type
|
||||||
* Fix buffers_adapter max_size
|
* Fix buffers_adapter max_size
|
||||||
* Fix buffers_prefix iterator decrement
|
* Fix buffers_prefix iterator decrement
|
||||||
|
* buffers_adapter improvements
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/beast/core/type_traits.hpp>
|
#include <boost/beast/core/type_traits.hpp>
|
||||||
#include <boost/asio/buffer.hpp>
|
#include <boost/asio/buffer.hpp>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
@@ -69,6 +70,9 @@ class buffers_adapter
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// The type of the underlying mutable buffer sequence
|
||||||
|
using value_type = MutableBufferSequence;
|
||||||
|
|
||||||
#if BOOST_BEAST_DOXYGEN
|
#if BOOST_BEAST_DOXYGEN
|
||||||
/// The type used to represent the input sequence as a list of buffers.
|
/// The type used to represent the input sequence as a list of buffers.
|
||||||
using const_buffers_type = implementation_defined;
|
using const_buffers_type = implementation_defined;
|
||||||
@@ -104,6 +108,17 @@ public:
|
|||||||
explicit
|
explicit
|
||||||
buffers_adapter(MutableBufferSequence const& buffers);
|
buffers_adapter(MutableBufferSequence const& buffers);
|
||||||
|
|
||||||
|
/** Constructor
|
||||||
|
|
||||||
|
This constructs the buffer adapter in-place from
|
||||||
|
a list of arguments.
|
||||||
|
|
||||||
|
@param args Arguments forwarded to the buffers constructor.
|
||||||
|
*/
|
||||||
|
template<class... Args>
|
||||||
|
explicit
|
||||||
|
buffers_adapter(boost::in_place_init_t, Args&&... args);
|
||||||
|
|
||||||
/// Returns the largest size output sequence possible.
|
/// Returns the largest size output sequence possible.
|
||||||
std::size_t
|
std::size_t
|
||||||
max_size() const
|
max_size() const
|
||||||
@@ -125,6 +140,13 @@ public:
|
|||||||
return max_size_;
|
return max_size_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the original mutable buffer sequence
|
||||||
|
value_type const&
|
||||||
|
value() const
|
||||||
|
{
|
||||||
|
return bs_;
|
||||||
|
}
|
||||||
|
|
||||||
/** Get a list of buffers that represents the output sequence, with the given size.
|
/** Get a list of buffers that represents the output sequence, with the given size.
|
||||||
|
|
||||||
@throws std::length_error if the size would exceed the limit
|
@throws std::length_error if the size would exceed the limit
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
namespace beast {
|
||||||
@@ -144,7 +145,8 @@ private:
|
|||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
inline
|
inline
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::const_buffers_type::begin() const ->
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
const_buffers_type::begin() const ->
|
||||||
const_iterator
|
const_iterator
|
||||||
{
|
{
|
||||||
return const_iterator{*ba_, ba_->begin_};
|
return const_iterator{*ba_, ba_->begin_};
|
||||||
@@ -153,7 +155,8 @@ buffers_adapter<MutableBufferSequence>::const_buffers_type::begin() const ->
|
|||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
inline
|
inline
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::const_buffers_type::end() const ->
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
const_buffers_type::end() const ->
|
||||||
const_iterator
|
const_iterator
|
||||||
{
|
{
|
||||||
return const_iterator{*ba_, ba_->out_ ==
|
return const_iterator{*ba_, ba_->out_ ==
|
||||||
@@ -308,8 +311,8 @@ end() const ->
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
buffers_adapter<MutableBufferSequence>::buffers_adapter(
|
buffers_adapter<MutableBufferSequence>::
|
||||||
buffers_adapter&& other)
|
buffers_adapter(buffers_adapter&& other)
|
||||||
: buffers_adapter(std::move(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.begin_),
|
||||||
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.out_),
|
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>
|
template<class MutableBufferSequence>
|
||||||
buffers_adapter<MutableBufferSequence>::buffers_adapter(
|
buffers_adapter<MutableBufferSequence>::
|
||||||
buffers_adapter const& other)
|
buffers_adapter(buffers_adapter const& other)
|
||||||
: buffers_adapter(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.begin_),
|
||||||
std::distance<iter_type>(boost::asio::buffer_sequence_begin(other.bs_), other.out_),
|
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>
|
template<class MutableBufferSequence>
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::operator=(
|
buffers_adapter<MutableBufferSequence>::
|
||||||
buffers_adapter&& other) -> buffers_adapter&
|
operator=(buffers_adapter&& other) ->
|
||||||
|
buffers_adapter&
|
||||||
{
|
{
|
||||||
auto const nbegin = std::distance<iter_type>(
|
auto const nbegin = std::distance<iter_type>(
|
||||||
boost::asio::buffer_sequence_begin(other.bs_),
|
boost::asio::buffer_sequence_begin(other.bs_),
|
||||||
@@ -355,8 +359,9 @@ buffers_adapter<MutableBufferSequence>::operator=(
|
|||||||
|
|
||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::operator=(
|
buffers_adapter<MutableBufferSequence>::
|
||||||
buffers_adapter const& other) -> buffers_adapter&
|
operator=(buffers_adapter const& other) ->
|
||||||
|
buffers_adapter&
|
||||||
{
|
{
|
||||||
auto const nbegin = std::distance<iter_type>(
|
auto const nbegin = std::distance<iter_type>(
|
||||||
boost::asio::buffer_sequence_begin(other.bs_),
|
boost::asio::buffer_sequence_begin(other.bs_),
|
||||||
@@ -380,8 +385,8 @@ buffers_adapter<MutableBufferSequence>::operator=(
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
buffers_adapter<MutableBufferSequence>::buffers_adapter(
|
buffers_adapter<MutableBufferSequence>::
|
||||||
MutableBufferSequence const& bs)
|
buffers_adapter(MutableBufferSequence const& bs)
|
||||||
: bs_(bs)
|
: bs_(bs)
|
||||||
, begin_(boost::asio::buffer_sequence_begin(bs_))
|
, begin_(boost::asio::buffer_sequence_begin(bs_))
|
||||||
, out_ (boost::asio::buffer_sequence_begin(bs_))
|
, out_ (boost::asio::buffer_sequence_begin(bs_))
|
||||||
@@ -390,9 +395,22 @@ 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>
|
template<class MutableBufferSequence>
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::prepare(std::size_t n) ->
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
prepare(std::size_t n) ->
|
||||||
mutable_buffers_type
|
mutable_buffers_type
|
||||||
{
|
{
|
||||||
using boost::asio::buffer_size;
|
using boost::asio::buffer_size;
|
||||||
@@ -433,7 +451,8 @@ buffers_adapter<MutableBufferSequence>::prepare(std::size_t n) ->
|
|||||||
|
|
||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
void
|
void
|
||||||
buffers_adapter<MutableBufferSequence>::commit(std::size_t n)
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
commit(std::size_t n)
|
||||||
{
|
{
|
||||||
using boost::asio::buffer_size;
|
using boost::asio::buffer_size;
|
||||||
if(out_ == end_)
|
if(out_ == end_)
|
||||||
@@ -469,7 +488,8 @@ buffers_adapter<MutableBufferSequence>::commit(std::size_t n)
|
|||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
inline
|
inline
|
||||||
auto
|
auto
|
||||||
buffers_adapter<MutableBufferSequence>::data() const ->
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
data() const ->
|
||||||
const_buffers_type
|
const_buffers_type
|
||||||
{
|
{
|
||||||
return const_buffers_type{*this};
|
return const_buffers_type{*this};
|
||||||
@@ -477,7 +497,8 @@ buffers_adapter<MutableBufferSequence>::data() const ->
|
|||||||
|
|
||||||
template<class MutableBufferSequence>
|
template<class MutableBufferSequence>
|
||||||
void
|
void
|
||||||
buffers_adapter<MutableBufferSequence>::consume(std::size_t n)
|
buffers_adapter<MutableBufferSequence>::
|
||||||
|
consume(std::size_t n)
|
||||||
{
|
{
|
||||||
using boost::asio::buffer_size;
|
using boost::asio::buffer_size;
|
||||||
while(begin_ != out_)
|
while(begin_ != out_)
|
||||||
|
@@ -104,7 +104,8 @@ public:
|
|||||||
BEAST_EXPECT(buffer_size(d) == 0);
|
BEAST_EXPECT(buffer_size(d) == 0);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto d = ba.prepare(z); BEAST_EXPECT(buffer_size(d) == z);
|
auto d = ba.prepare(z);
|
||||||
|
BEAST_EXPECT(buffer_size(d) == z);
|
||||||
ba.commit(buffer_copy(d, buffer(s.data()+x+y, z)));
|
ba.commit(buffer_copy(d, buffer(s.data()+x+y, z)));
|
||||||
}
|
}
|
||||||
ba.commit(2);
|
ba.commit(2);
|
||||||
|
Reference in New Issue
Block a user