mirror of
https://github.com/boostorg/beast.git
synced 2025-08-03 14:54:32 +02:00
Add 1-element specialization for buffers_cat
`buffers_cat` now supports 1 or more buffers sequences. Close #1280 Signed-off-by: Damian Jarek <damian.jarek93@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ Version 256:
|
||||
* Expand CI matrix using Azure Pipelines
|
||||
* Make chat websocket javascript client more user friendly
|
||||
* `allocator_traits::construct` is used for user-defined types
|
||||
* Add 1-element specialization for `buffers_cat`
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
@@ -65,7 +65,8 @@ public:
|
||||
end() const;
|
||||
};
|
||||
|
||||
/** Concatenate 2 or more buffer sequences.
|
||||
/** Concatenate 1 or more buffer sequences.
|
||||
|
||||
This function returns a constant or mutable buffer sequence which,
|
||||
when iterated, efficiently concatenates the input buffer sequences.
|
||||
Copies of the arguments passed will be made; however, the returned
|
||||
@@ -85,15 +86,15 @@ template<class... BufferSequence>
|
||||
buffers_cat_view<BufferSequence...>
|
||||
buffers_cat(BufferSequence const&... buffers)
|
||||
#else
|
||||
template<class B1, class B2, class... Bn>
|
||||
buffers_cat_view<B1, B2, Bn...>
|
||||
buffers_cat(B1 const& b1, B2 const& b2, Bn const&... bn)
|
||||
template<class B1, class... Bn>
|
||||
buffers_cat_view<B1, Bn...>
|
||||
buffers_cat(B1 const& b1, Bn const&... bn)
|
||||
#endif
|
||||
{
|
||||
static_assert(
|
||||
is_const_buffer_sequence<B1, B2, Bn...>::value,
|
||||
is_const_buffer_sequence<B1, Bn...>::value,
|
||||
"BufferSequence type requirements not met");
|
||||
return buffers_cat_view<B1, B2, Bn...>{b1, b2, bn...};
|
||||
return buffers_cat_view<B1, Bn...>{b1, bn...};
|
||||
}
|
||||
|
||||
} // beast
|
||||
|
@@ -23,6 +23,34 @@
|
||||
namespace boost {
|
||||
namespace beast {
|
||||
|
||||
template<class Buffer>
|
||||
class buffers_cat_view<Buffer>
|
||||
{
|
||||
Buffer buffer_;
|
||||
public:
|
||||
using value_type = buffers_type<Buffer>;
|
||||
|
||||
using const_iterator = buffers_iterator_type<Buffer>;
|
||||
|
||||
explicit
|
||||
buffers_cat_view(Buffer const& buffer)
|
||||
: buffer_(buffer)
|
||||
{
|
||||
}
|
||||
|
||||
const_iterator
|
||||
begin() const
|
||||
{
|
||||
return net::buffer_sequence_begin(buffer_);
|
||||
}
|
||||
|
||||
const_iterator
|
||||
end() const
|
||||
{
|
||||
return net::buffer_sequence_end(buffer_);
|
||||
}
|
||||
};
|
||||
|
||||
#if defined(_MSC_VER) && ! defined(__clang__)
|
||||
# define BOOST_BEAST_UNREACHABLE() __assume(false)
|
||||
# define BOOST_BEAST_UNREACHABLE_RETURN(v) __assume(false)
|
||||
|
Reference in New Issue
Block a user