mirror of
https://github.com/boostorg/beast.git
synced 2025-08-05 15:54:46 +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
|
* Expand CI matrix using Azure Pipelines
|
||||||
* Make chat websocket javascript client more user friendly
|
* Make chat websocket javascript client more user friendly
|
||||||
* `allocator_traits::construct` is used for user-defined types
|
* `allocator_traits::construct` is used for user-defined types
|
||||||
|
* Add 1-element specialization for `buffers_cat`
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -65,7 +65,8 @@ public:
|
|||||||
end() const;
|
end() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Concatenate 2 or more buffer sequences.
|
/** Concatenate 1 or more buffer sequences.
|
||||||
|
|
||||||
This function returns a constant or mutable buffer sequence which,
|
This function returns a constant or mutable buffer sequence which,
|
||||||
when iterated, efficiently concatenates the input buffer sequences.
|
when iterated, efficiently concatenates the input buffer sequences.
|
||||||
Copies of the arguments passed will be made; however, the returned
|
Copies of the arguments passed will be made; however, the returned
|
||||||
@@ -85,15 +86,15 @@ template<class... BufferSequence>
|
|||||||
buffers_cat_view<BufferSequence...>
|
buffers_cat_view<BufferSequence...>
|
||||||
buffers_cat(BufferSequence const&... buffers)
|
buffers_cat(BufferSequence const&... buffers)
|
||||||
#else
|
#else
|
||||||
template<class B1, class B2, class... Bn>
|
template<class B1, class... Bn>
|
||||||
buffers_cat_view<B1, B2, Bn...>
|
buffers_cat_view<B1, Bn...>
|
||||||
buffers_cat(B1 const& b1, B2 const& b2, Bn const&... bn)
|
buffers_cat(B1 const& b1, Bn const&... bn)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
static_assert(
|
static_assert(
|
||||||
is_const_buffer_sequence<B1, B2, Bn...>::value,
|
is_const_buffer_sequence<B1, Bn...>::value,
|
||||||
"BufferSequence type requirements not met");
|
"BufferSequence type requirements not met");
|
||||||
return buffers_cat_view<B1, B2, Bn...>{b1, b2, bn...};
|
return buffers_cat_view<B1, Bn...>{b1, bn...};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // beast
|
} // beast
|
||||||
|
@@ -23,6 +23,34 @@
|
|||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
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__)
|
#if defined(_MSC_VER) && ! defined(__clang__)
|
||||||
# define BOOST_BEAST_UNREACHABLE() __assume(false)
|
# define BOOST_BEAST_UNREACHABLE() __assume(false)
|
||||||
# define BOOST_BEAST_UNREACHABLE_RETURN(v) __assume(false)
|
# define BOOST_BEAST_UNREACHABLE_RETURN(v) __assume(false)
|
||||||
|
Reference in New Issue
Block a user