128 lines
4.1 KiB
C++
128 lines
4.1 KiB
C++
//
|
|
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
// Official repository: https://github.com/boostorg/beast
|
|
//
|
|
|
|
#ifndef BOOST_BEAST_BUFFERS_RANGE_HPP
|
|
#define BOOST_BEAST_BUFFERS_RANGE_HPP
|
|
|
|
#include <boost/beast/core/detail/config.hpp>
|
|
#include <boost/beast/core/buffer_traits.hpp>
|
|
#include <boost/beast/core/detail/buffers_range_adaptor.hpp>
|
|
|
|
namespace boost {
|
|
namespace beast {
|
|
|
|
/** Returns an iterable range representing a buffer sequence.
|
|
|
|
This function returns an iterable range representing the
|
|
passed buffer sequence. The values obtained when iterating
|
|
the range will be `net::const_buffer`, unless the underlying
|
|
buffer sequence is a <em>MutableBufferSequence</em>, in which case
|
|
the value obtained when iterating will be a `net::mutable_buffer`.
|
|
|
|
@par Example
|
|
|
|
The following function returns the total number of bytes in
|
|
the specified buffer sequence. A copy of the buffer sequence
|
|
is maintained for the lifetime of the range object:
|
|
|
|
@code
|
|
template <class BufferSequence>
|
|
std::size_t buffer_sequence_size (BufferSequence const& buffers)
|
|
{
|
|
std::size_t size = 0;
|
|
for (auto const buffer : buffers_range (buffers))
|
|
size += buffer.size();
|
|
return size;
|
|
}
|
|
@endcode
|
|
|
|
@param buffers The buffer sequence to adapt into a range. The
|
|
range object returned from this function will contain a copy
|
|
of the passed buffer sequence.
|
|
|
|
@return An object of unspecified type which meets the requirements
|
|
of <em>ConstBufferSequence</em>. If `buffers` is a mutable buffer
|
|
sequence, the returned object will also meet the requirements of
|
|
<em>MutableBufferSequence</em>.
|
|
|
|
@see buffers_range_ref
|
|
*/
|
|
template<class BufferSequence>
|
|
#if BOOST_BEAST_DOXYGEN
|
|
__implementation_defined__
|
|
#else
|
|
detail::buffers_range_adaptor<BufferSequence>
|
|
#endif
|
|
buffers_range(BufferSequence const& buffers)
|
|
{
|
|
static_assert(
|
|
is_const_buffer_sequence<BufferSequence>::value,
|
|
"BufferSequence type requirements not met");
|
|
return detail::buffers_range_adaptor<
|
|
BufferSequence>(buffers);
|
|
}
|
|
|
|
/** Returns an iterable range representing a buffer sequence.
|
|
|
|
This function returns an iterable range representing the
|
|
passed buffer sequence. The values obtained when iterating
|
|
the range will be `net::const_buffer`, unless the underlying
|
|
buffer sequence is a <em>MutableBufferSequence</em>, in which case
|
|
the value obtained when iterating will be a `net::mutable_buffer`.
|
|
|
|
@par Example
|
|
|
|
The following function returns the total number of bytes in
|
|
the specified buffer sequence. A reference to the original
|
|
buffers is maintained for the lifetime of the range object:
|
|
|
|
@code
|
|
template <class BufferSequence>
|
|
std::size_t buffer_sequence_size_ref (BufferSequence const& buffers)
|
|
{
|
|
std::size_t size = 0;
|
|
for (auto const buffer : buffers_range_ref (buffers))
|
|
size += buffer.size();
|
|
return size;
|
|
}
|
|
@endcode
|
|
|
|
@param buffers The buffer sequence to adapt into a range. The
|
|
range returned from this function will maintain a reference to
|
|
these buffers. The application is responsible for ensuring that
|
|
the lifetime of the referenced buffers extends until the range
|
|
object is destroyed.
|
|
|
|
@return An object of unspecified type which meets the requirements
|
|
of <em>ConstBufferSequence</em>. If `buffers` is a mutable buffer
|
|
sequence, the returned object will also meet the requirements of
|
|
<em>MutableBufferSequence</em>.
|
|
|
|
@see buffers_range
|
|
*/
|
|
template<class BufferSequence>
|
|
#if BOOST_BEAST_DOXYGEN
|
|
__implementation_defined__
|
|
#else
|
|
detail::buffers_range_adaptor<BufferSequence const&>
|
|
#endif
|
|
buffers_range_ref(BufferSequence const& buffers)
|
|
{
|
|
static_assert(
|
|
is_const_buffer_sequence<BufferSequence>::value,
|
|
"BufferSequence type requirements not met");
|
|
return detail::buffers_range_adaptor<
|
|
BufferSequence const&>(buffers);
|
|
}
|
|
|
|
} // beast
|
|
} // boost
|
|
|
|
#endif
|